<?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>145525</bug_id>
          
          <creation_ts>2015-06-01 14:01:07 -0700</creation_ts>
          <short_desc>finally blocks should not set the exception stack trace when re-throwing the exception.</short_desc>
          <delta_ts>2015-06-09 10:35:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>145522</dependson>
    
    <dependson>145524</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1098583</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-01 14:01:07 -0700</bug_when>
    <thetext>Finally blocks are implemented as a Catch block with an op_throw at its end to re-throw the exception.  Currently, this throw in the finally block is no different than the throw that originated the exception.  As a result, the exception stack trace is now set to the re-throw location in the finally block.  This results in the Inspector reporting the wrong throw point for the exception.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098585</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-01 14:03:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/18780129&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098586</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-01 14:03:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/18780129&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098870</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-02 13:26:05 -0700</bug_when>
    <thetext>*** Bug 145522 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098871</commentid>
    <comment_count>4</comment_count>
      <attachid>254092</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-02 13:27:30 -0700</bug_when>
    <thetext>Created attachment 254092
work in progress: for EWS testing and personal review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099106</commentid>
    <comment_count>5</comment_count>
      <attachid>254160</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-03 00:13:59 -0700</bug_when>
    <thetext>Created attachment 254160
patch 2 for EWS testing.  Still need to write tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099110</commentid>
    <comment_count>6</comment_count>
      <attachid>254161</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-03 01:51:50 -0700</bug_when>
    <thetext>Created attachment 254161
patch 3: fixed broken builds for another round of EWS testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099114</commentid>
    <comment_count>7</comment_count>
      <attachid>254163</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-03 02:55:30 -0700</bug_when>
    <thetext>Created attachment 254163
patch 4: another try to fix those gtk, efl build failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099211</commentid>
    <comment_count>8</comment_count>
      <attachid>254192</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-03 12:21:04 -0700</bug_when>
    <thetext>Created attachment 254192
patch 5: +Windows fix, +test

Still not ready for review.  This patch contains hacks to work around a potential bug in the Inspector code.  Will need to address that Inspector issue before I can finalize this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099216</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-03 12:23:36 -0700</bug_when>
    <thetext>Attachment 254192 did not pass style-queue:


ERROR: Source/WebCore/inspector/InspectorTimelineAgent.cpp:322:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/inspector/InspectorTimelineAgent.cpp:707:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 2 in 100 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099237</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-03 13:14:06 -0700</bug_when>
    <thetext>*** Bug 121108 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099239</commentid>
    <comment_count>11</comment_count>
      <attachid>254201</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-03 13:19:24 -0700</bug_when>
    <thetext>Created attachment 254201
patch 6: windows build fix again for EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099240</commentid>
    <comment_count>12</comment_count>
      <attachid>254192</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-06-03 13:21:06 -0700</bug_when>
    <thetext>Comment on attachment 254192
patch 5: +Windows fix, +test

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

Some testing tips.

&gt; LayoutTests/inspector/debugger/break-on-exceptions-expected.txt:38
&gt; +PAUSE #1
&gt; +  REASON: exception
&gt; +Paused at foo:12:34
&gt; +RESUMED

Output might look nicer if everything within the pause/resumed section was indented.

    PAUSE #1
      REASON: exception
      LOCATION: foo:12:34
    RESUMED

You could even slim this down more, and make the reason an assertion (InspectorTest.assert(foo.bar.pauseReason === &quot;exception&quot;)) and just output the pause locations.

    Pass 1: testExceptions with break on all exceptions
    PAUSED AT: foo:12:34
    PAUSED AT: foo:17:16

    Pass 2: ...
    PAUSED AT: ...

&gt; LayoutTests/inspector/debugger/break-on-exceptions.html:29
&gt; +        InspectorTest.evaluateInPage(&quot;setTimeout(function() { console.log(&apos;&quot; + str + &quot;&apos;); }, 0)&quot;);

Seems this would work better as an InspectorTest.log. So you would know in the bottom part of the expected results, which PAUSEs correspond to the different test scenarios. It is non-obvious for example that the Pause 1 and 2 correspond to &quot;Pass 1&quot;, and Pause 6 corresponded to &quot;Pass 3&quot;.

&gt; LayoutTests/inspector/debugger/break-on-exceptions.html:73
&gt; +        { expression: // resumed from Throw Point 1.
&gt; +            &quot;nothingToDo();&quot;
&gt; +        },

Are these nothingToDo&apos;s actually necessary?

I think the test might make more sense like:

    var scenarios = [
        {
          title: &quot;Pass 1: testExceptions with break on all exceptions&quot;,
          setup: &quot;enableBreakOnAllExceptions(); disableBreakOnUncaughtExceptions()&quot;,
          expression: &quot;runTestCase(&apos;testExceptions&apos;)&quot;
        },
          title: &quot;Pass 2: ...&quot;,
          setup: &quot;...&quot;,
          expression: &quot;...&quot;
        }
    ]

Where each scenario has a single expression, and you just log every pause that happens. When you&apos;ve resumed, move onto the next.

But I may be overlooking something.

&gt; LayoutTests/inspector/debugger/break-on-exceptions.html:156
&gt; +//     WebInspector.debuggerManager.addEventListener(WebInspector.DebuggerManager.Event.CallFramesDidChange, function(event) {

Paused / Resumed are &quot;the first time you paused&quot; and &quot;we resumed and didn&apos;t pause again for 50ms&quot;. So these events won&apos;t trigger during stepping / pausing immediately after continuing. They try to be higher level.

CallFramesDidChange and related events will get dispatched each and every pause, so during stepping / pausing immediately after continuing.

&gt; LayoutTests/inspector/debugger/break-on-exceptions.html:173
&gt; +    &lt;p&gt;Test that pausing in different ways triggers different pause reasons.&lt;/p&gt;

You should update the description of this test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099242</commentid>
    <comment_count>13</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-06-03 13:22:46 -0700</bug_when>
    <thetext>&gt; CallFramesDidChange and related events will get dispatched each and every
&gt; pause, so during stepping / pausing immediately after continuing.

I should clarify. Every individual pause and resume! So the first pause, steps, and resume.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099368</commentid>
    <comment_count>14</comment_count>
      <attachid>254233</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-03 20:19:26 -0700</bug_when>
    <thetext>Created attachment 254233
patch 7: hopefully for real this time.

I&apos;ll wait for the EWS bots to clear before marking it for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099449</commentid>
    <comment_count>15</comment_count>
      <attachid>254257</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-04 00:37:13 -0700</bug_when>
    <thetext>Created attachment 254257
patch 8: windows build fixed

The only remaining issue is that the new test break-on-exceptions.html triggers an assertion failure in the InspectorTimelineAgent.  I think that this is a latent bug in the Inspector that the test just uncovers.  I&apos;ll check with the Inspector folks tomorrow and update the patch to skip the test on debug builds if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099476</commentid>
    <comment_count>16</comment_count>
      <attachid>254257</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-04 05:54:19 -0700</bug_when>
    <thetext>Comment on attachment 254257
patch 8: windows build fixed

Bots are green.  Let’s get this reviewed while I look into the InspectorTimelineAgent issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099643</commentid>
    <comment_count>17</comment_count>
      <attachid>254257</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-06-04 15:12:03 -0700</bug_when>
    <thetext>Comment on attachment 254257
patch 8: windows build fixed

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

r=me if you perform the fixups below:

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +        Whatâs wrong with how it presently works:

Please use ASCII here and elsewhere.

&gt; Source/JavaScriptCore/ChangeLog:40
&gt; +           object or not.  If it is not an Exception object, then we must be thrown a new

thrown=&gt;throwing

&gt; Source/JavaScriptCore/API/JSObjectRef.cpp:65
&gt; +static bool handleExceptionIfNeeded(ExecState* exec, JSValueRef* returnedExceptionRef)

bool is opaque. Let&apos;s use an enum class { DidThrowException, DidNotThrowException }.

&gt; Source/JavaScriptCore/API/JSValueRef.cpp:56
&gt; +static bool handleExceptionIfNeeded(ExecState* exec, JSValueRef* returnedExceptionRef)

Ditto.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:188
&gt; +    HandlerInfo* handlerForBytecodeOffset(unsigned bytecodeOffset, bool requireCatchHandler = false);

Please use enum class { CatchHandler, AnyHandler }.

&gt; Source/JavaScriptCore/runtime/Exception.cpp:45
&gt; +    exception-&gt;Exception::~Exception();

No need for Exception:: here.

&gt; Source/JavaScriptCore/runtime/Exception.cpp:63
&gt; +    if (!thisObject-&gt;m_value)
&gt; +        return;
&gt; +    if (!thisObject-&gt;m_value.get().isCell())
&gt; +        return;
&gt; +    visitor.append(&amp;thisObject-&gt;m_value);

You should just append without checking. append() will check for you.

&gt; Source/JavaScriptCore/runtime/Exception.cpp:74
&gt; +Exception::Exception(VM&amp; vm, JSValue thrownValue)
&gt; +    : Base(vm, vm.exceptionStructure.get())
&gt; +{
&gt; +    m_value.set(vm, this, thrownValue);
&gt; +
&gt; +    Vector&lt;StackFrame&gt; stackTrace;
&gt; +    vm.interpreter-&gt;getStackTrace(stackTrace);
&gt; +    m_stack = RefCountedArray&lt;StackFrame&gt;(stackTrace);
&gt; +}

This is wrong. GC objects should never do interesting work in their constructors. Interesting work must be delayed to the finishCreation function.

&gt; Source/JavaScriptCore/runtime/Exception.h:34
&gt; +class Exception : public JSObject {

JSNonFinalObject is better.

&gt; Source/JavaScriptCore/runtime/VM.cpp:564
&gt; +    if (thrownValue.isCell() &amp;&amp; thrownValue.asCell()-&gt;structure() == exceptionStructure.get())

Please use jsDynamicCast instead.

&gt; LayoutTests/inspector/debugger/resources/break-on-exceptions.js:1
&gt; +window.onerror = function(e){

Let&apos;s break the different test cases into different file: onerror, for-of, catch, finally, forEach, promises.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099869</commentid>
    <comment_count>18</comment_count>
      <attachid>254367</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-05 11:15:10 -0700</bug_when>
    <thetext>Created attachment 254367
patch for landing with fixes applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099874</commentid>
    <comment_count>19</comment_count>
      <attachid>254367</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-06-05 11:20:04 -0700</bug_when>
    <thetext>Comment on attachment 254367
patch for landing with fixes applied.

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

&gt; LayoutTests/http/tests/inspector/inspector-test.js:146
&gt; +InspectorTestProxy.needToSanitizeUncaughtExceptionUrls = false;

URLs should be capitalized.

&gt; LayoutTests/http/tests/inspector/inspector-test.js:153
&gt; +            var lastSlash = url.lastIndexOf(&apos;/&apos;);
&gt; +            var lastBackSlash = url.lastIndexOf(&apos;\\&apos;);

We use double quotes exclusively.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099894</commentid>
    <comment_count>20</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-05 11:55:40 -0700</bug_when>
    <thetext>I&apos;ve updated the patch with Tim&apos;s feedback.  Geoff&apos;s feedback has already been applied.

The elf WES bot failure is due to a pre-existing condition in ToT.
The gtk merge failure is simply due to a merge conflict.

Landed in r185259: &lt;http://trac.webkit.org/r185259&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100012</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-06-05 16:35:33 -0700</bug_when>
    <thetext>This broke many inspector tests on Windows:

https://build.webkit.org/results/Apple%20Win%207%20Release%20(Tests)/r185269%20(52268)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100016</commentid>
    <comment_count>22</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-05 16:51:45 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; This broke many inspector tests on Windows:
&gt; 
&gt; https://build.webkit.org/results/Apple%20Win%207%20Release%20(Tests)/
&gt; r185269%20(52268)/results.html

The breakage appears to be unrelated to exception breakpoints, and only manifests on Windows.  I suspect that the issue might be that the Windows bot needs a clean build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100044</commentid>
    <comment_count>23</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-05 18:31:37 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; This broke many inspector tests on Windows:
&gt; &gt; 
&gt; &gt; https://build.webkit.org/results/Apple%20Win%207%20Release%20(Tests)/
&gt; &gt; r185269%20(52268)/results.html
&gt; 
&gt; The breakage appears to be unrelated to exception breakpoints, and only
&gt; manifests on Windows.  I suspect that the issue might be that the Windows
&gt; bot needs a clean build.

I filed https://bugs.webkit.org/show_bug.cgi?id=145720 to investigate the issue.  Turns out that those tests have been skipped for Mac and Debug Win tests bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100697</commentid>
    <comment_count>24</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-06-09 10:35:56 -0700</bug_when>
    <thetext>Looks like this was 1.5% progression on Speedometer.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254092</attachid>
            <date>2015-06-02 13:27:30 -0700</date>
            <delta_ts>2015-06-03 00:13:59 -0700</delta_ts>
            <desc>work in progress: for EWS testing and personal review.</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>131454</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4NTExMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDU0LDYgKzQ1NCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAg
ICBydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5jcHAKICAgICBydW50aW1lL0Vycm9ySW5zdGFu
Y2UuY3BwCiAgICAgcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKKyAgICBydW50aW1lL0V4Y2Vw
dGlvbi5jcHAKICAgICBydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCiAgICAgcnVudGltZS9FeGNl
cHRpb25IZWxwZXJzLmNwcAogICAgIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNvbXBs
ZXRpb24uaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJEaXNh
c3NlbWJsZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFeGNlcHRpb25I
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJJbml0aWFs
aXplVGhyZWFkaW5nLmgiCkBAIC04OTksMTMgKzkwMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoCiAgICAg
ICAgIGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksICJhcmd1bWVudHMiKSwgYXJyYXkpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRpb247
CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKICAg
ICBzdG9wV2F0Y2guc3RhcnQoKTsKLSAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSwganNjU291cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXhj
ZXB0aW9uKTsKKyAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291
cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCBleGNlcHRpb24pOwogICAg
IHN0b3BXYXRjaC5zdG9wKCk7CiAKLSAgICBpZiAoISFleGNlcHRpb24pIHsKKyAgICBpZiAoZXhj
ZXB0aW9uKSB7CiAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpAQCAtOTIyLDggKzkyMyw4IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2EKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgCi0gICAgSlNWYWx1
ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFt
ZSksIEpTVmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEV4Y2VwdGlvbiogZXZh
bHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBK
U1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIGlmIChldmFsdWF0aW9uRXhjZXB0
aW9uKQogICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV2YWx1YXRpb25F
eGNlcHRpb24pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTEyODUs
MTUgKzEyODYsMTUgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0Kgog
CiAgICAgICAgIHZtLnN0YXJ0U2FtcGxpbmcoKTsKIAotICAgICAgICBKU1ZhbHVlIGV2YWx1YXRp
b25FeGNlcHRpb247Ci0gICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdCwgZmlsZU5hbWUpLCBKU1Zh
bHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgRXhjZXB0aW9uKiBldmFsdWF0
aW9uRXhjZXB0aW9uOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZpbGVOYW1lKSwgSlNW
YWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3Mg
JiYgIWV2YWx1YXRpb25FeGNlcHRpb247CiAgICAgICAgIGlmIChkdW1wICYmICFldmFsdWF0aW9u
RXhjZXB0aW9uKQogICAgICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50
b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNl
cHRpb24pIHsKLSAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlv
bkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHBy
aW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0
cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIElkZW50aWZpZXIgc3RhY2tJ
RCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksICJz
dGFjayIpOwotICAgICAgICAgICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXZhbHVhdGlvbkV4Y2Vw
dGlvbi5nZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOworICAgICAgICAg
ICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS5nZXQo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOwogICAgICAgICAgICAgaWYgKCFz
dGFja1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIl
c1xuIiwgc3RhY2tWYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZh
bHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
fQpAQCAtMTM0OSw4ICsxMzUwLDggQEAgc3RhdGljIHZvaWQgcnVuSW50ZXJhY3RpdmUoR2xvYmFs
T2JqZWN0KgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBl
dmFsdWF0aW9uRXhjZXB0aW9uOwotICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVh
dGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc291cmNlLCBpbnRlcnBy
ZXRlck5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgRXhj
ZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVl
ID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc291cmNl
LCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogI2Vs
c2UKICAgICAgICAgcHJpbnRmKCIlcyIsIGludGVyYWN0aXZlUHJvbXB0KTsKICAgICAgICAgVmVj
dG9yPGNoYXIsIDI1Nj4gbGluZTsKQEAgLTEzNjksNyArMTM3MCw3IEBAIHN0YXRpYyB2b2lkIHJ1
bkludGVyYWN0aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9
IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2UobGluZS5kYXRh
KCksIGludGVycHJldGVyTmFtZSksIEpTVmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOwog
I2VuZGlmCiAgICAgICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQotICAgICAgICAgICAgcHJp
bnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3RyaW5nKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkp
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBl
dmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCByZXR1cm5WYWx1ZS50
b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNCYXNlLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvbXBsZXRp
b24uaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJh
Y2suaCIKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3QuaCIKQEAgLTYzLDEyICs2NCwxMiBAQCBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3Jp
cHQoSlNDb250ZXh0UmVmCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PnZtRW50cnlHbG9iYWxPYmplY3QoKTsKICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3Vy
Y2Uoc2NyaXB0LT5zdHJpbmcoKSwgc291cmNlVVJMID8gc291cmNlVVJMLT5zdHJpbmcoKSA6IFN0
cmluZygpLCBUZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHN0YXJ0
aW5nTGluZU51bWJlciksIE9yZGluYWxOdW1iZXI6OmZpcnN0KCkpKTsKIAotICAgIEpTVmFsdWUg
ZXZhbHVhdGlvbkV4Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHNvdXJjZSwganNUaGlzT2JqZWN0LCAmZXZhbHVh
dGlvbkV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOworICAg
IEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSwgc291cmNlLCBqc1RoaXNPYmplY3QsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogCiAgICAgaWYg
KGV2YWx1YXRpb25FeGNlcHRpb24pIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAg
ICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAg
ICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1
ZSgpKTsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKICAgICAgICAgLy8gRklYTUU6IElm
IHdlIGhhdmUgYSBkZWJ1Z2dlciBhdHRhY2hlZCB3ZSBjb3VsZCBsZWFybiBhYm91dCBQYXJzZUVy
cm9yIGV4Y2VwdGlvbnMgdGhyb3VnaAogICAgICAgICAvLyBTY3JpcHREZWJ1Z1NlcnZlcjo6c291
cmNlUGFyc2VkIGFuZCB0aGlzIHBhdGggY291bGQgcHJvZHVjZSBhIGR1cGxpY2F0ZSB3YXJuaW5n
LiBUaGUKQEAgLTEwNyw3ICsxMDgsOCBAQCBib29sIEpTQ2hlY2tTY3JpcHRTeW50YXgoSlNDb250
ZXh0UmVmIGN0CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoZXhlYywgc3ludGF4RXhjZXB0aW9uKTsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CisgICAg
ICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gRXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwg
c3ludGF4RXhjZXB0aW9uKTsKKyAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7
CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUg
IkRhdGVDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKQEAg
LTYxLDYgKzYyLDIxIEBACiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKK3N0YXRpYyBib29sIGhh
bmRsZUV4Y2VwdGlvbklmTmVlZGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVJlZiogcmV0dXJu
ZWRFeGNlcHRpb25SZWYpCit7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAg
ICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIGlm
IChyZXR1cm5lZEV4Y2VwdGlvblJlZikKKyAgICAgICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvblJl
ZiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7CisgICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgICAgIGV4ZWMt
PnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4
Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOworI2VuZGlmCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIEpTQ2xhc3NSZWYgSlNDbGFzc0NyZWF0ZShj
b25zdCBKU0NsYXNzRGVmaW5pdGlvbiogZGVmaW5pdGlvbikKIHsKICAgICBpbml0aWFsaXplVGhy
ZWFkaW5nKCk7CkBAIC0xNDgsMTYgKzE2NCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUZ1
bmN0aW9uKEpTQ29udGUKICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhleGVjLCBib2R5LT5zdHJp
bmcoKSkpOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgYXJncywgbmFtZUlELCBzb3VyY2VVUkwgPyBz
b3VyY2VVUkwtPnN0cmluZygpIDogU3RyaW5nKCksIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVy
Ojpmcm9tT25lQmFzZWRJbnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcjo6Zmly
c3QoKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVl
IGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRp
b24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUp
OwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2Vu
ZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAg
ICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQog
CkBAIC0xODAsMTYgKzE4OCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUFycmF5KEpTQ29u
dGV4dFIKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShl
eGVjLCAwKTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1Zh
bHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNl
cHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFs
dWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwot
I2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikp
CiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQogCiAgICAgcmV0dXJuIHRvUmVmKHJlc3VsdCk7
CiB9CkBAIC0yMDgsMTYgKzIwOCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZURhdGUoSlND
b250ZXh0UmUKICAgICAgICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBhcmd1bWVudHNbaV0p
KTsKIAogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3REYXRlKGV4ZWMsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgYXJnTGlzdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24o
KTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1Jl
ZihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVj
LCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVk
ZWQoZXhlYywgZXhjZXB0aW9uKSkKICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICB9CiAKICAgICBy
ZXR1cm4gdG9SZWYocmVzdWx0KTsKIH0KQEAgLTIzNSwxNiArMjI3LDggQEAgSlNPYmplY3RSZWYg
SlNPYmplY3RNYWtlRXJyb3IoSlNDb250ZXh0UgogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1
cmUgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCk7CiAgICAg
SlNPYmplY3QqIHJlc3VsdCA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVj
dHVyZSwgbWVzc2FnZSk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAg
ICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBp
ZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2Vw
dGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZh
bHVlKTsKLSNlbmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNl
cHRpb24pKQogICAgICAgICByZXN1bHQgPSAwOwotICAgIH0KIAogICAgIHJldHVybiB0b1JlZihy
ZXN1bHQpOwogfQpAQCAtMjYzLDE2ICsyNDcsOCBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VS
ZWdFeHAoSlNDb250ZXh0CiAgICAgICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgYXJndW1l
bnRzW2ldKSk7CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0UmVnRXhwKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgIGFyZ0xpc3QpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+
ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0
aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52
bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNl
cHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2Vw
dGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAg
fQogICAgIAogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQpAQCAtMzM5LDE1ICszMTUsNyBA
QCBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJvcGVydHkoSlNDb250ZXh0CiAgICAgSlNPYmplY3Qq
IGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNPYmpl
Y3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25W
YWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAg
ICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAg
ICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCku
cmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0K
KyAgICBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVy
biB0b1JlZihleGVjLCBqc1ZhbHVlKTsKIH0KIApAQCAtMzcyLDE1ICszNDAsNyBAQCB2b2lkIEpT
T2JqZWN0U2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGN0CiAgICAgICAgIGpzT2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5wdXQoanNPYmplY3QsIGV4ZWMsIG5hbWUsIGpzVmFsdWUsIHNsb3QpOwogICAg
IH0KIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4
Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24p
Ci0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwot
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRy
b2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlm
Ci0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiB9
CiAKIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXh0UmVmIGN0
eCwgSlNPYmplY3RSZWYgb2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCkBAIC0zOTUsMTUgKzM1NSw3IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoSlMKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7
CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc09iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5SW5k
ZXgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4
Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24p
Ci0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwot
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRy
b2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlm
Ci0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiAg
ICAgcmV0dXJuIHRvUmVmKGV4ZWMsIGpzVmFsdWUpOwogfQogCkBAIC00MjEsMTUgKzM3Myw3IEBA
IHZvaWQgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXgKICAgICBKU1ZhbHVlIGpz
VmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKICAgICAKICAgICBqc09iamVjdC0+bWV0aG9kVGFi
bGUoKS0+cHV0QnlJbmRleChqc09iamVjdCwgZXhlYywgcHJvcGVydHlJbmRleCwganNWYWx1ZSwg
ZmFsc2UpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVl
IGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRp
b24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUp
OwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2Vu
ZGlmCi0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7
CiB9CiAKIGJvb2wgSlNPYmplY3REZWxldGVQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09i
amVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQpAQCAtNDQ0LDE1ICszODgsNyBAQCBib29sIEpTT2JqZWN0RGVsZXRlUHJvcGVydHko
SlNDb250ZXh0UmVmCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCiAg
ICAgYm9vbCByZXN1bHQgPSBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHko
anNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAg
ICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQot
ICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAg
fQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApAQCAtNjE2LDE2ICs1NTIsOCBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0
Q2FsbEFzRnVuY3Rpb24oSlNDb250CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgSlNWYWx1ZVJl
ZiByZXN1bHQgPSB0b1JlZihleGVjLCBjYWxsKGV4ZWMsIGpzT2JqZWN0LCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGpzVGhpc09iamVjdCwgYXJnTGlzdCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9u
KCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9S
ZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xv
YmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhl
YywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVl
ZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTY1NywxNiArNTg1LDggQEAgSlNPYmplY3RSZWYgSlNPYmpl
Y3RDYWxsQXNDb25zdHJ1Y3RvcihKUwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1l
bnRDb3VudDsgaSsrKQogICAgICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGFyZ3VtZW50
c1tpXSkpOwogICAgIEpTT2JqZWN0UmVmIHJlc3VsdCA9IHRvUmVmKGNvbnN0cnVjdChleGVjLCBq
c09iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJnTGlzdCkpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAg
ICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBv
cnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhh
bmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9
IDA7Ci0gICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHRSZWYuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24u
aCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0Jhc2VQcml2YXRlLmgiCiAj
aW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJKU1NjcmlwdFJlZlByaXZhdGUuaCIKQEAgLTE0Miwx
MiArMTQzLDEyIEBAIEpTVmFsdWVSZWYgSlNTY3JpcHRFdmFsdWF0ZShKU0NvbnRleHRSZWYKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQotICAgIEpTVmFsdWUgaW50ZXJuYWxFeGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBpbnRl
cm5hbEV4Y2VwdGlvbjsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHRoaXNWYWx1ZVJlZiA/IHRv
SlMoZXhlYywgdGhpc1ZhbHVlUmVmKSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBldmFsdWF0ZShleGVjLCBTb3VyY2VDb2RlKHNjcmlwdCksIHRoaXNWYWx1ZSwgJmludGVy
bmFsRXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGV4ZWMsIFNvdXJj
ZUNvZGUoc2NyaXB0KSwgdGhpc1ZhbHVlLCBpbnRlcm5hbEV4Y2VwdGlvbik7CiAgICAgaWYgKGlu
dGVybmFsRXhjZXB0aW9uKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAq
ZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgaW50ZXJuYWxFeGNlcHRpb24pOworICAgICAgICAgICAg
KmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGludGVybmFsRXhjZXB0aW9uLT52YWx1ZSgpKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIEFTU0VSVChyZXN1bHQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW1wb3J0ICJBUElDYXN0LmgiCiAjaW1wb3J0ICJEYXRlSW5zdGFuY2UuaCIKICNpbXBv
cnQgIkVycm9yLmgiCisjaW1wb3J0ICJFeGNlcHRpb24uaCIKICNpbXBvcnQgIkphdmFTY3JpcHRD
b3JlLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWaXJ0dWFs
TWFjaGluZUludGVybmFsLmgiCkBAIC02NDUsOSArNjQ2LDEwIEBAIEpTQ29udGFpbmVyQ29udmVy
dG9yOjpUYXNrIEpTQ29udGFpbmVyQ28KIH0KIAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9S
KQotc3RhdGljIHZvaWQgcmVwb3J0RXhjZXB0aW9uVG9JbnNwZWN0b3IoSlNHbG9iYWxDb250ZXh0
UmVmIGNvbnRleHQsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24pCitzdGF0aWMgdm9pZCByZXBvcnRF
eGNlcHRpb25Ub0luc3BlY3RvcihKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNDOjpKU1Zh
bHVlIGV4Y2VwdGlvblZhbHVlKQogewogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhj
b250ZXh0KTsKKyAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246
OmNyZWF0ZShleGVjLT52bSgpLCBleGNlcHRpb25WYWx1ZSk7CiAgICAgZXhlYy0+dm1FbnRyeUds
b2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4
ZWMsIGV4Y2VwdGlvbik7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWYWx1ZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1ZhbHVlUmVmLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZS5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCkBAIC01Miw2ICs1Mywy
MSBAQAogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCitzdGF0aWMgYm9vbCBoYW5kbGVFeGNlcHRp
b25JZk5lZWRlZChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVSZWYqIHJldHVybmVkRXhjZXB0aW9u
UmVmKQoreworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBFeGNlcHRp
b24qIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBpZiAocmV0dXJuZWRF
eGNlcHRpb25SZWYpCisgICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb25SZWYgPSB0b1JlZihl
eGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorICAgICAgICBleGVjLT52bUVudHJ5R2xv
YmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhl
YywgZXhjZXB0aW9uKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCiAjaWYgUExBVEZPUk0oTUFDKQogc3RhdGljIGJvb2wgZXZlcm5v
dGVIYWNrTmVlZGVkKCkKIHsKQEAgLTIyNCwxNSArMjQwLDggQEAgYm9vbCBKU1ZhbHVlSXNFcXVh
bChKU0NvbnRleHRSZWYgY3R4LCBKUwogICAgIEpTVmFsdWUganNCID0gdG9KUyhleGVjLCBiKTsK
IAogICAgIGJvb2wgcmVzdWx0ID0gSlNWYWx1ZTo6ZXF1YWwoZXhlYywganNBLCBqc0IpOyAvLyBm
YWxzZSBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24o
KTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1Jl
ZihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVj
LCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKLSAgICB9CisgICAgaGFuZGxlRXhjZXB0aW9uSWZO
ZWVkZWQoZXhlYywgZXhjZXB0aW9uKTsKKyAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBA
IC0yNjYsMTUgKzI3NSw3IEBAIGJvb2wgSlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0cnVjdG9yKEpT
Q28KICAgICBpZiAoIWpzQ29uc3RydWN0b3ItPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmltcGxl
bWVudHNIYXNJbnN0YW5jZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCByZXN1
bHQgPSBqc0NvbnN0cnVjdG9yLT5oYXNJbnN0YW5jZShleGVjLCBqc1ZhbHVlKTsgLy8gZmFsc2Ug
aWYgYW4gZXhjZXB0aW9uIGlzIHRocm93bgotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
ewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0g
ICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhl
YywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lm
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2Jq
ZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhj
ZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVk
KGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzY4LDE2ICsz
NjksOCBAQCBKU1N0cmluZ1JlZiBKU1ZhbHVlQ3JlYXRlSlNPTlN0cmluZyhKU0NvCiAgICAgU3Ry
aW5nIHJlc3VsdCA9IEpTT05TdHJpbmdpZnkoZXhlYywgdmFsdWUsIGluZGVudCk7CiAgICAgaWYg
KGV4Y2VwdGlvbikKICAgICAgICAgKmV4Y2VwdGlvbiA9IDA7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNl
cHRpb24oKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24g
PSB0b1JlZihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50
cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlv
bihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9u
SWZOZWVkZWQoZXhlYywgZXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogICAg
IHJldHVybiBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKHJlc3VsdCkubGVha1JlZigpOwogfQogCkBA
IC00MDYsMTYgKzM5OSw4IEBAIGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0
eCwKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKIAogICAgIGRvdWJs
ZSBudW1iZXIgPSBqc1ZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0
aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0g
dG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5
R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24o
ZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklm
TmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIG51bWJlciA9IFBOYU47Ci0gICAgfQog
ICAgIHJldHVybiBudW1iZXI7CiB9CiAKQEAgLTQzMSwxNiArNDE2LDggQEAgSlNTdHJpbmdSZWYg
SlNWYWx1ZVRvU3RyaW5nQ29weShKU0NvbnRleAogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMo
ZXhlYywgdmFsdWUpOwogICAgIAogICAgIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gc3RyaW5nUmVm
KE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUoanNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9u
KQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsK
LSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRp
ZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAg
ICAgICBzdHJpbmdSZWYuY2xlYXIoKTsKLSAgICB9CiAgICAgcmV0dXJuIHN0cmluZ1JlZi5yZWxl
YXNlKCkubGVha1JlZigpOwogfQogCkBAIC00NTYsMTYgKzQzMyw4IEBAIEpTT2JqZWN0UmVmIEpT
VmFsdWVUb09iamVjdChKU0NvbnRleHRSZWYKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4
ZWMsIHZhbHVlKTsKICAgICAKICAgICBKU09iamVjdFJlZiBvYmplY3RSZWYgPSB0b1JlZihqc1Zh
bHVlLnRvT2JqZWN0KGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAg
ICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAg
ICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4
Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFC
TEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
blZhbHVlKTsKLSNlbmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBl
eGNlcHRpb24pKQogICAgICAgICBvYmplY3RSZWYgPSAwOwotICAgIH0KICAgICByZXR1cm4gb2Jq
ZWN0UmVmOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJ
KHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcxMiw2
ICs3MTIsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJvckhhbmRs
aW5nU2NvcGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJv
ckluc3RhbmNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJy
b3JQcm90b3R5cGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxF
eGNlcHRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNl
cHRpb25GdXp6LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhj
ZXB0aW9uSGVscGVycy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEV4ZWN1dGFibGUuY3BwIiAvPgpAQCAtMTUwMyw2ICsxNTA0LDcgQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JIYW5kbGluZ1Njb3BlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEVycm9ySW5zdGFuY2UuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JQcm90b3R5cGUuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlvbkZ1enouaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uSGVscGVycy5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxFeGVjdXRhYmxlLmgiIC8+CkBAIC0xODI3LDQgKzE4MjksNCBA
QAogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICAgIDxJbXBvcnQg
UHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxCdWlsZEN1c3RvbWl6YXRpb25zXG1hc20udGFyZ2V0
cyIgLz4KICAgPC9JbXBvcnRHcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCis8L1Byb2plY3Q+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZp
bHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTE2OTgsNiArMTY5OCw5IEBACiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFsdWVTdHJlbmd0aC5jcHAiPgogICAgICAgPEZpbHRlcj5k
Zmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcRXhjZXB0aW9uLmNwcCI+CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4K
KyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhj
ZXB0aW9uRnV6ei5jcHAiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9D
bENvbXBpbGU+CkBAIC00MTkwLDYgKzQxOTMsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1ZhbHVlU3RyZW5ndGguaCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNl
cHRpb24uaCI+CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVk
ZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uRnV6ei5oIj4K
ICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtNDQ4
NSw0ICs0NDkxLDQgQEAKICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9NQVNNPgog
ICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8
L1Byb2plY3Q+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE2NjAsNiArMTY2MCw4IEBACiAJCUU0
OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNDkxMkVGMjYx
QTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRBMDYxQUI4REQwQTAwMkY1NEJG
IC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlv
blRpbWVMaW1pdFRlc3QuY3BwICovOyB9OwogCQlGRTBENEEwOTFBQkEyNDM3MDAyRjU0QkYgLyog
R2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ0QTA3MUFCQTI0MzcwMDJGNTRCRiAvKiBHbG9i
YWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuY3BwICovOyB9OworCQlGRTFDMEZGRDFCMTkzRTk4
MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUxQzBGRkYx
QjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0
aW9uLmNwcCAqLzsgfTsKIAkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3Au
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENF
OUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovOyB9OwogCQlGRTIwQ0U5RTE1
RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
RTM4NEVFNTFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NEVFMTFBRERCN0FEMDA1NURFMkMg
LyogSlNEb2xsYXJWTS5jcHAgKi87IH07CkBAIC0zNDYzLDYgKzM0NjUsOCBAQAogCQlGRTBENEEw
NTFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBFeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHBhdGggPSBB
UEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRTBENEEwNzFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5h
bGl6ZXJUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEdsb2Jh
bENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvR2xvYmFsQ29u
dGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkUwRDRBMDgxQUJBMjQzNzAwMkY1NEJGIC8qIEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHbG9iYWxDb250ZXh0V2l0aEZp
bmFsaXplclRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9HbG9iYWxDb250ZXh0V2l0aEZpbmFsaXpl
clRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxQzBGRkMxQjE5M0U5ODAw
QjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
eGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxQzBGRkUxQjE5NEZE
MTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFeGNlcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIw
Q0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xv
b3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBE
RjM0MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBM
TEludENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFMzg0RUUxMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9sbGFyVk0uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQyNyw2ICs0NDMxLDggQEAKIAkJCQlCQzAyRTk4
QjBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUx
ODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4
MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCisJCQkJRkUxQzBGRkMxQjE5M0U5
ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAorCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZD
QSAvKiBFeGNlcHRpb24uY3BwICovLAogCQkJCTBGMTJERTBEMTk3OUQ1RkQwMDA2RkY0RSAvKiBF
eGNlcHRpb25GdXp6LmNwcCAqLywKIAkJCQkwRjEyREUwRTE5NzlENUZEMDAwNkZGNEUgLyogRXhj
ZXB0aW9uRnV6ei5oICovLAogCQkJCTE0MjlEODc3MEVEMjFBQ0QwMEI4OTYxOSAvKiBFeGNlcHRp
b25IZWxwZXJzLmNwcCAqLywKQEAgLTU2MjQsNiArNTYzMCw3IEBACiAJCQkJRkU0RDU1QjgxQUU3
MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1
MDY4NjUxQUUyNDYzOTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzQ0MkNCMjUxQTZDREI4QzAwNUQzRDdDIC8qIEpTSW5wdXRzLmpzb24gaW4gSGVh
ZGVycyAqLywKKwkJCQlGRTFDMEZGRDFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQ
cm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8q
IEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcxMEUxOUY2REY4
MTAwOThGNUVDIC8qIEluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIGluIEhl
YWRlcnMgKi8sCkBAIC03NDA4LDYgKzc0MTUsNyBAQAogCQkJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1
NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENE
MjE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDMTg0RTFFMTdCRUUyMkUwMDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJRkUxQzBGRkYxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDlGQjg2QjFBRTMzNUM2MDAzOUQwNjkgLyogV2Vh
a1NldFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENERTE4NzEyNThEMDA5
NTVDMjQgLyogSlNQcm9taXNlUmVhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUz
RDExNjEzNkRBOTAwOUYxN0QwIC8qIEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25D
YWxsLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMywxMSArMTMz
LDExIEBAIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2EKICAgICAgICAg
cmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsK
LSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICBp
ZiAobV9jYWxsSGFuZGxlcikKLSAgICAgICAgcmVzdWx0ID0gbV9jYWxsSGFuZGxlcihtX2V4ZWMs
IGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIG1fYXJndW1lbnRzLCAm
ZXhjZXB0aW9uKTsKKyAgICAgICAgcmVzdWx0ID0gbV9jYWxsSGFuZGxlcihtX2V4ZWMsIGZ1bmN0
aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIG1fYXJndW1lbnRzLCBleGNlcHRp
b24pOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gSlNDOjpjYWxsKG1fZXhlYywgZnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc09iamVjdCwgbV9hcmd1bWVudHMsICZleGNlcHRp
b24pOworICAgICAgICByZXN1bHQgPSBKU0M6OmNhbGwobV9leGVjLCBmdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCB0aGlzT2JqZWN0LCBtX2FyZ3VtZW50cywgZXhjZXB0aW9uKTsKIAogICAg
IGlmIChleGNlcHRpb24pIHsKICAgICAgICAgaGFkRXhjZXB0aW9uID0gdHJ1ZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxs
LmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9T
Y3JpcHRGdW5jdGlvbkNhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwcml2
YXRlOgogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBTY3JpcHRGdW5jdGlvbkNhbGwgOiBwdWJs
aWMgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6
OkpTVmFsdWUgKCpTY3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBj
b25zdCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbik7CisgICAgdHlw
ZWRlZiBKU0M6OkpTVmFsdWUgKCpTY3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNh
bGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkV4Y2VwdGlvbiomIGV4Y2VwdGlv
bik7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBTY3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyIGhhbmRsZXIg
PSBudWxscHRyKTsKICAgICBTY3JpcHRWYWx1ZSBjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbik7CiAg
ICAgU2NyaXB0VmFsdWUgY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1c2hfd2l0
aF9zY29wZSIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcG9w
X3Njb3BlIiwgImxlbmd0aCIgOiAyIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXNo
X25hbWVfc2NvcGUiLCAibGVuZ3RoIiA6IDUgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9w
X2NhdGNoIiwgImxlbmd0aCIgOiAyIH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYXRj
aCIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdGhyb3ciLCAi
bGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Rocm93X3N0YXRpY19l
cnJvciIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVidWci
LCAibGVuZ3RoIiA6IDMgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzAz
LDcgKzMwMyw2IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2RlQmwKICAg
ICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CiAgICAgY2FzZSBvcF9zdHJjYXQ6CiAgICAgY2FzZSBv
cF90b19wcmltaXRpdmU6Ci0gICAgY2FzZSBvcF9jYXRjaDoKICAgICBjYXNlIG9wX2NyZWF0ZV90
aGlzOgogICAgIGNhc2Ugb3BfbmV3X2FycmF5OgogICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZl
cjoKQEAgLTM3NCw2ICszNzMsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQo
Q29kZUJsCiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQs
IGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAg
Y2FzZSBvcF9jYXRjaDoKICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OiB7
CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVj
dGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0ODQsNyArMTQ4NCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNv
ZGUoCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9jYXRjaDogewogICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRS
ZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYXRjaCIsIHIwKTsKKyAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2F0Y2giKTsKKyAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUocjEpLmRhdGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIG9wX3Rocm93OiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SGFuZGxlckluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSGFuZGxlckluZm8uaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgZW51bSBjbGFzcyBIYW5kbGVyVHlwZSB7CiBzdHJ1Y3QgSGFuZGxlckluZm9CYXNlIHsKICAg
ICBIYW5kbGVyVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SGFuZGxlclR5
cGU+KHR5cGVCaXRzKTsgfQogICAgIHZvaWQgc2V0VHlwZShIYW5kbGVyVHlwZSB0eXBlKSB7IHR5
cGVCaXRzID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5cGUpOyB9Ci0gICAgCisKICAgICBjb25z
dCBjaGFyKiB0eXBlTmFtZSgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgewpAQCAt
NTUsOSArNTUsOSBAQCBzdHJ1Y3QgSGFuZGxlckluZm9CYXNlIHsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgCisKICAgICBib29sIGlzQ2F0Y2hIYW5kbGVy
KCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEhhbmRsZXJUeXBlOjpDYXRjaDsgfQotICAgIAor
CiAgICAgdWludDMyX3Qgc3RhcnQ7CiAgICAgdWludDMyX3QgZW5kOwogICAgIHVpbnQzMl90IHRh
cmdldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUyOCw3ICsyNTI4LDcgQEAgVHJ5RGF0YSogQnl0ZWNvZGVHZW5lcmF0b3I6
OnB1c2hUcnkoTGFiZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjpwb3BUcnlBbmRFbWl0Q2F0Y2goVHJ5RGF0YSogdHJ5RGF0YSwgUmVnaXN0
ZXJJRCogdGFyZ2V0UmVnaXN0ZXIsIExhYmVsKiBlbmQsIEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBl
KQordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kRW1pdENhdGNoKFRyeURhdGEqIHRy
eURhdGEsIFJlZ2lzdGVySUQqIGV4Y2VwdGlvblJlZ2lzdGVyLCBSZWdpc3RlcklEKiB0aHJvd25W
YWx1ZVJlZ2lzdGVyLCBMYWJlbCogZW5kLCBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSkKIHsKICAg
ICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKICAgICAKQEAgLTI1NDYsOCArMjU0Niw4IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BUcnlBbmQKICAgICB0cnlSYW5nZS50cnlE
YXRhLT5oYW5kbGVyVHlwZSA9IGhhbmRsZXJUeXBlOwogCiAgICAgZW1pdE9wY29kZShvcF9jYXRj
aCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldFJlZ2lzdGVyLT5pbmRleCgpKTsK
LSAgICByZXR1cm4gdGFyZ2V0UmVnaXN0ZXI7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGV4
Y2VwdGlvblJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGhy
b3duVmFsdWVSZWdpc3Rlci0+aW5kZXgoKSk7CiB9CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKQEAgLTI3NjAs
NyArMjc2MCwxMSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24oCiAg
ICAgICAgIC8vIEl0ZXJhdG9yQ2xvc2Ugc2VxdWVuY2UgZm9yIHRocm93LWVkIGNvbnRyb2wgZmxv
dy4KICAgICAgICAgewogICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBjYXRjaEhlcmUgPSBlbWl0
TGFiZWwobmV3TGFiZWwoKS5nZXQoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZXhjZXB0aW9uUmVnaXN0ZXIgPSBwb3BUcnlBbmRFbWl0Q2F0Y2godHJ5RGF0YSwgbmV3VGVtcG9y
YXJ5KCksIGNhdGNoSGVyZS5nZXQoKSwgSGFuZGxlclR5cGU6OlN5bnRoZXNpemVkRmluYWxseSk7
CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVnaXN0ZXIgPSBuZXdU
ZW1wb3JhcnkoKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aHJvd25WYWx1ZVJl
Z2lzdGVyID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgICAgICAgICBwb3BUcnlBbmRFbWl0Q2F0Y2go
dHJ5RGF0YSwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgdGhyb3du
VmFsdWVSZWdpc3Rlci5nZXQoKSwgY2F0Y2hIZXJlLmdldCgpLCBIYW5kbGVyVHlwZTo6U3ludGhl
c2l6ZWRGaW5hbGx5KTsKKwogICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBjYXRjaERvbmUgPSBu
ZXdMYWJlbCgpOwogCiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuTWV0aG9k
ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIGl0ZXJhdG9yLmdldCgpLCBwcm9wZXJ0eU5h
bWVzKCkucmV0dXJuS2V5d29yZCk7CkBAIC0yNzc4LDcgKzI3ODIsOCBAQCB2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24oCiAgICAgICAgICAgICBlbWl0VGhyb3coZXhjZXB0
aW9uUmVnaXN0ZXIuZ2V0KCkpOwogCiAgICAgICAgICAgICAvLyBBYnNvcmIgZXhjZXB0aW9uLgot
ICAgICAgICAgICAgcG9wVHJ5QW5kRW1pdENhdGNoKHJldHVybkNhbGxUcnlEYXRhLCBuZXdUZW1w
b3JhcnkoKSwgY2F0Y2hEb25lLmdldCgpLCBIYW5kbGVyVHlwZTo6U3ludGhlc2l6ZWRGaW5hbGx5
KTsKKyAgICAgICAgICAgIHBvcFRyeUFuZEVtaXRDYXRjaChyZXR1cm5DYWxsVHJ5RGF0YSwgbmV3
VGVtcG9yYXJ5KCksCisgICAgICAgICAgICAgICAgbmV3VGVtcG9yYXJ5KCksIGNhdGNoRG9uZS5n
ZXQoKSwgSGFuZGxlclR5cGU6OlN5bnRoZXNpemVkRmluYWxseSk7CiAgICAgICAgICAgICBlbWl0
VGhyb3coZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTUzLDcgKzU1Myw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBTdGFydCBhIHRyeSBibG9jay4gJ3N0YXJ0
JyBtdXN0IGhhdmUgYmVlbiBlbWl0dGVkLgogICAgICAgICBUcnlEYXRhKiBwdXNoVHJ5KExhYmVs
KiBzdGFydCk7CiAgICAgICAgIC8vIEVuZCBhIHRyeSBibG9jay4gJ2VuZCcgbXVzdCBoYXZlIGJl
ZW4gZW1pdHRlZC4KLSAgICAgICAgUmVnaXN0ZXJJRCogcG9wVHJ5QW5kRW1pdENhdGNoKFRyeURh
dGEqLCBSZWdpc3RlcklEKiB0YXJnZXRSZWdpc3RlciwgTGFiZWwqIGVuZCwgSGFuZGxlclR5cGUp
OworICAgICAgICB2b2lkIHBvcFRyeUFuZEVtaXRDYXRjaChUcnlEYXRhKiwgUmVnaXN0ZXJJRCog
ZXhjZXB0aW9uUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHRocm93blZhbHVlUmVnaXN0ZXIsIExhYmVs
KiBlbmQsIEhhbmRsZXJUeXBlKTsKIAogICAgICAgICB2b2lkIGVtaXRUaHJvdyhSZWdpc3RlcklE
KiBleGMpCiAgICAgICAgIHsgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4ODEsNyArMjg4MSw5IEBAIHZvaWQgVHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXIKIAogICAgICAgICAvLyBVbmNhdWdodCBleGNlcHRpb24gcGF0aDogdGhlIGNh
dGNoIGJsb2NrLgogICAgICAgICBSZWZQdHI8TGFiZWw+IGhlcmUgPSBnZW5lcmF0b3IuZW1pdExh
YmVsKGdlbmVyYXRvci5uZXdMYWJlbCgpLmdldCgpKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gZ2VuZXJhdG9yLnBvcFRyeUFuZEVtaXRDYXRjaCh0cnlE
YXRhLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGhlcmUuZ2V0KCksIEhhbmRsZXJUeXBlOjpD
YXRjaCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNlcHRpb25SZWdpc3RlciA9IGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRocm93
blZhbHVlUmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVy
YXRvci5wb3BUcnlBbmRFbWl0Q2F0Y2godHJ5RGF0YSwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCks
IHRocm93blZhbHVlUmVnaXN0ZXIuZ2V0KCksIGhlcmUuZ2V0KCksIEhhbmRsZXJUeXBlOjpDYXRj
aCk7CiAgICAgICAgIAogICAgICAgICBpZiAobV9maW5hbGx5QmxvY2spIHsKICAgICAgICAgICAg
IC8vIElmIHRoZSBjYXRjaCBibG9jayB0aHJvd3MgYW4gZXhjZXB0aW9uIGFuZCB3ZSBoYXZlIGEg
ZmluYWxseSBibG9jaywgdGhlbiB0aGUgZmluYWxseQpAQCAtMjg4OSw3ICsyODkxLDcgQEAgdm9p
ZCBUcnlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcgogICAgICAgICAgICAgdHJ5RGF0
YSA9IGdlbmVyYXRvci5wdXNoVHJ5KGhlcmUuZ2V0KCkpOwogICAgICAgICB9CiAKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQdXNoQ2F0Y2hTY29wZShnZW5lcmF0b3Iuc2NvcGVSZWdpc3RlcigpLCBt
X2V4Y2VwdGlvbklkZW50LCBleGNlcHRpb25SZWdpc3Rlci5nZXQoKSwgRG9udERlbGV0ZSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHVzaENhdGNoU2NvcGUoZ2VuZXJhdG9yLnNjb3BlUmVnaXN0
ZXIoKSwgbV90aHJvd25WYWx1ZUlkZW50LCB0aHJvd25WYWx1ZVJlZ2lzdGVyLmdldCgpLCBEb250
RGVsZXRlKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cobV90cnlC
bG9jay0+ZW5kT2Zmc2V0KCkgKyAxKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9jYXRjaEJsb2NrKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQb3BTY29wZShnZW5lcmF0b3Iu
c2NvcGVSZWdpc3RlcigpKTsKQEAgLTI5MTIsMTAgKzI5MTQsMTIgQEAgdm9pZCBUcnlOb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcgogICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZmlu
YWxseUVuZExhYmVsLmdldCgpKTsKIAogICAgICAgICAvLyBVbmNhdWdodCBleGNlcHRpb24gcGF0
aDogaW52b2tlIHRoZSBmaW5hbGx5IGJsb2NrLCB0aGVuIHJlLXRocm93IHRoZSBleGNlcHRpb24u
Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wRXhjZXB0aW9uUmVnaXN0ZXIgPSBnZW5l
cmF0b3IucG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgcHJlRmluYWxseUxhYmVsLmdldCgpLCBIYW5kbGVyVHlwZTo6RmluYWxseSk7CisgICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBleGNlcHRpb25SZWdpc3RlciA9IGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRocm93blZhbHVlUmVnaXN0ZXIg
PSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BUcnlBbmRF
bWl0Q2F0Y2godHJ5RGF0YSwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksIHRocm93blZhbHVlUmVn
aXN0ZXIuZ2V0KCksIHByZUZpbmFsbHlMYWJlbC5nZXQoKSwgSGFuZGxlclR5cGU6OkZpbmFsbHkp
OwogICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhmaW5hbGx5U3RhcnRP
ZmZzZXQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2ZpbmFsbHlCbG9jayk7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0VGhyb3codGVtcEV4Y2VwdGlvblJlZ2lzdGVyLmdldCgp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRUaHJvdyhleGNlcHRpb25SZWdpc3Rlci5nZXQoKSk7
CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChmaW5hbGx5RW5kTGFiZWwuZ2V0KCkpOwog
ICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhtX2ZpbmFsbHlCbG9jay0+
ZW5kT2Zmc2V0KCkgKyAxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg3LDcgKzQ4Nyw3IEBA
IGJvb2wgRGVidWdnZXI6Omhhc0JyZWFrcG9pbnQoU291cmNlSUQgc28KICAgICAvLyBzbyBtYWtl
IGl0IGxvb2tzIGxpa2UgdGhlIGRlYnVnZ2VyIGlzIGFscmVhZHkgcGF1c2VkLgogICAgIFRlbXBv
cmFyeVBhdXNlZFN0YXRlIHBhdXNlZFN0YXRlKCp0aGlzKTsKIAotICAgIEpTVmFsdWUgZXhjZXB0
aW9uOworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uOwogICAgIERlYnVnZ2VyQ2FsbEZyYW1lKiBk
ZWJ1Z2dlckNhbGxGcmFtZSA9IGN1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZSgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0gZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKGJyZWFrcG9pbnQtPmNvbmRp
dGlvbiwgZXhjZXB0aW9uKTsKIApAQCAtNjk1LDEzICs2OTUsMTMgQEAgdm9pZCBEZWJ1Z2dlcjo6
cGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIAogICAgIH0KIH0KIAotdm9pZCBEZWJ1Z2dlcjo6ZXhj
ZXB0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgYm9vbCBoYXNI
YW5kbGVyKQordm9pZCBEZWJ1Z2dlcjo6ZXhjZXB0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1ZhbHVlIGV4Y2VwdGlvbiwgYm9vbCBoYXNDYXRjaEhhbmRsZXIpCiB7CiAgICAgaWYgKG1faXNQ
YXVzZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIFBhdXNlUmVhc29uRGVjbGFyYXRpb24gcmVh
c29uKCp0aGlzLCBQYXVzZWRGb3JFeGNlcHRpb24pOwotICAgIGlmIChtX3BhdXNlT25FeGNlcHRp
b25zU3RhdGUgPT0gUGF1c2VPbkFsbEV4Y2VwdGlvbnMgfHwgKG1fcGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZSA9PSBQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zICYmICFoYXNIYW5kbGVyKSkgeworICAg
IGlmIChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPbkFsbEV4Y2VwdGlvbnMgfHwg
KG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9PSBQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zICYm
ICFoYXNDYXRjaEhhbmRsZXIpKSB7CiAgICAgICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0
cnVlOwogICAgICAgICBzZXRTdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRW5hYmxlZCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHJldmlz
aW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIHNvdXJjZVBhcnNlZChFeGVjU3RhdGUqLCBTb3VyY2VQcm92aWRlciosIGludCBlcnJv
ckxpbmVOdW1iZXIsIGNvbnN0IFdURjo6U3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsKIAotICAg
IHZvaWQgZXhjZXB0aW9uKENhbGxGcmFtZSosIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIGJvb2wg
aGFzSGFuZGxlcik7CisgICAgdm9pZCBleGNlcHRpb24oQ2FsbEZyYW1lKiwgSlNWYWx1ZSBleGNl
cHRpb25WYWx1ZSwgYm9vbCBoYXNDYXRjaEhhbmRsZXIpOwogICAgIHZvaWQgYXRTdGF0ZW1lbnQo
Q2FsbEZyYW1lKik7CiAgICAgdm9pZCBjYWxsRXZlbnQoQ2FsbEZyYW1lKik7CiAgICAgdm9pZCBy
ZXR1cm5FdmVudChDYWxsRnJhbWUqKTsKQEAgLTEyNCw3ICsxMjQsNyBAQCBwdWJsaWM6CiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIG5lZWRQYXVzZUhhbmRsaW5nKEpTR2xvYmFsT2JqZWN0
KikgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQnJlYWtwb2ludEhp
dChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEJyZWFrcG9pbnQmKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRXhjZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKEV4ZWNTdGF0ZSosIEpTVmFs
dWUgZXhjZXB0aW9uKSBjb25zdCB7IFVOVVNFRF9QQVJBTShleGNlcHRpb24pOyB9CisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlvbihFeGVjU3RhdGUq
LCBFeGNlcHRpb24qKSBjb25zdCB7IH0KICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGF1c2UoSlNH
bG9iYWxPYmplY3QqLCBSZWFzb25Gb3JQYXVzZSkgeyB9CiAgICAgdmlydHVhbCB2b2lkIG5vdGlm
eURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKSB7IH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCShyZXZp
c2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJD
YWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJFdmFsRW5hYmxlci5oIgogI2luY2x1ZGUg
IkRlYnVnZ2VyU2NvcGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0xleGljYWxF
bnZpcm9ubWVudC5oIgpAQCAtMTc2LDcgKzE3Nyw3IEBAIEpTVmFsdWUgRGVidWdnZXJDYWxsRnJh
bWU6OnRoaXNWYWx1ZSgpIGMKIH0KIAogLy8gRXZhbHVhdGUgc29tZSBKYXZhU2NyaXB0IGNvZGUg
aW4gdGhlIHNjb3BlIG9mIHRoaXMgZnJhbWUuCi1KU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpl
dmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNWYWx1ZSYgZXhjZXB0aW9uKQorSlNWYWx1
ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIEV4Y2Vw
dGlvbiomIGV4Y2VwdGlvbikKIHsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IG1fY2FsbEZyYW1lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE4NTExMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
RGVidWdnZXJTY29wZTsKK2NsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIEV4ZWNTdGF0ZTsKIHR5cGVk
ZWYgRXhlY1N0YXRlIENhbGxGcmFtZTsKIApAQCAtNjYsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGZ1bmN0aW9uTmFtZSgpIGNvbnN0OwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIFR5cGUgdHlwZSgpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
VmFsdWUgdGhpc1ZhbHVlKCkgY29uc3Q7Ci0gICAgSlNWYWx1ZSBldmFsdWF0ZShjb25zdCBTdHJp
bmcmLCBKU1ZhbHVlJiBleGNlcHRpb24pOworICAgIEpTVmFsdWUgZXZhbHVhdGUoY29uc3QgU3Ry
aW5nJiwgRXhjZXB0aW9uKiYpOwogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4g
ISFtX2NhbGxGcmFtZTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgaW52YWxpZGF0ZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1h
bmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzksOSArMTM5LDkgQEAgRGVwcmVjYXRlZDo6U2NyaXB0T2JqZWN0IEluamVj
dGVkU2NyaXB0TQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY3JpcHRTdGF0
ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIEpTVmFsdWUgZ2xvYmFsVGhpc1ZhbHVlID0g
c2NyaXB0U3RhdGUtPmdsb2JhbFRoaXNWYWx1ZSgpOwogCi0gICAgSlNWYWx1ZSBldmFsdWF0aW9u
RXhjZXB0aW9uOworICAgIEV4Y2VwdGlvbiogZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAgICBJbnNw
ZWN0b3JFdmFsdWF0ZUhhbmRsZXIgZXZhbHVhdGVIYW5kbGVyID0gbV9lbnZpcm9ubWVudC5ldmFs
dWF0ZUhhbmRsZXIoKTsKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBldmFsdWF0ZUhhbmRs
ZXIoc2NyaXB0U3RhdGUsIHNvdXJjZUNvZGUsIGdsb2JhbFRoaXNWYWx1ZSwgJmV2YWx1YXRpb25F
eGNlcHRpb24pOworICAgIEpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGV2YWx1YXRlSGFuZGxlcihz
Y3JpcHRTdGF0ZSwgc291cmNlQ29kZSwgZ2xvYmFsVGhpc1ZhbHVlLCBldmFsdWF0aW9uRXhjZXB0
aW9uKTsKICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIERlcHJl
Y2F0ZWQ6OlNjcmlwdE9iamVjdCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAxODUx
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckVudmlyb25t
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMywxNCBAQCBjbGFzcyBTdG9wd2F0Y2g7
CiB9CiAKIG5hbWVzcGFjZSBKU0MgeworY2xhc3MgRXhjZXB0aW9uOwogY2xhc3MgU291cmNlQ29k
ZTsKIH0KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgSlNDOjpKU1ZhbHVlICgq
SW5zcGVjdG9yRnVuY3Rpb25DYWxsSGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6
SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlND
OjpDYWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6
QXJnTGlzdCYgYXJncywgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pOwotdHlwZWRlZiBKU0M6OkpT
VmFsdWUgKCpJbnNwZWN0b3JFdmFsdWF0ZUhhbmRsZXIpKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpTb3VyY2VDb2RlJiwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpKU1ZhbHVlKiBl
eGNlcHRpb24pOwordHlwZWRlZiBKU0M6OkpTVmFsdWUgKCpJbnNwZWN0b3JGdW5jdGlvbkNhbGxI
YW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0
LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwg
SlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkV4
Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKTsKK3R5cGVkZWYgSlNDOjpKU1ZhbHVlICgqSW5z
cGVjdG9yRXZhbHVhdGVIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6U291cmNl
Q29kZSYsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRF
eGNlcHRpb24pOwogCiBjbGFzcyBJbnNwZWN0b3JFbnZpcm9ubWVudCB7CiBwdWJsaWM6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxODUx
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNp
bmNsdWRlICJDb21wbGV0aW9uLmgiCiAjaW5jbHVkZSAiQ29uc29sZU1lc3NhZ2UuaCIKICNpbmNs
dWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNs
dWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1hbmFn
ZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5oIgpAQCAtMTg4LDcgKzE4OSw3IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjoKICNlbmRpZgogfQogCi12b2lk
IEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVwb3J0QVBJRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb24pCit2b2lkIEpTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlcjo6cmVwb3J0QVBJRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhj
ZXB0aW9uKiBleGNlcHRpb24pCiB7CiAgICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2Vw
dGlvbihleGNlcHRpb24pKQogICAgICAgICByZXR1cm47CkBAIC0yMDEsNyArMjAyLDcgQEAgdm9p
ZCBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6OgogCiAgICAgLy8gRklYTUU6IDxo
dHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3RvcjogU2hvdWxkIG5vdCBldmFs
dWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKICAgICAvLyBJZiB0aGlzIGlzIGEg
Y3VzdG9tIGV4Y2VwdGlvbiBvYmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5IGFuZCBn
ZXQgYSBuaWNlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4KLSAgICBT
dHJpbmcgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAg
aWYgKEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6bG9nVG9TeXN0ZW1Db25zb2xlKCkpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNw
ZWN0b3JDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdElu
c3BlY3RvckNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBjbGFz
cyBTdG9wd2F0Y2g7CiAKIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ29uc29sZUNsaWVudDsKK2Ns
YXNzIEV4Y2VwdGlvbjsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0Owog
Y2xhc3MgSlNWYWx1ZTsKQEAgLTgxLDcgKzgyLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SW5j
bHVkZXNOYXRpdmVDYWxsU3RhY2tXaGVuUmVwb3J0aW5nRXhjZXB0aW9ucyhib29sIGluY2x1ZGVz
TmF0aXZlQ2FsbFN0YWNrKSB7IG1faW5jbHVkZU5hdGl2ZUNhbGxTdGFja1dpdGhFeGNlcHRpb25z
ID0gaW5jbHVkZXNOYXRpdmVDYWxsU3RhY2s7IH0KIAogICAgIHZvaWQgcGF1c2UoKTsKLSAgICB2
b2lkIHJlcG9ydEFQSUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNl
cHRpb24pOworICAgIHZvaWQgcmVwb3J0QVBJRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFeGNlcHRpb24qKTsKIAogICAgIEpTQzo6Q29uc29sZUNsaWVudCogY29uc29sZUNsaWVudCgp
IGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFs
T2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuaAkocmV2aXNp
b24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9i
amVjdFNjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAg
cHJpdmF0ZToKICAgICAvLyBOT1RFOiBDdXJyZW50bHkgYWxsIGV4Y2VwdGlvbnMgYXJlIHJlcG9y
dGVkIGF0IHRoZSBBUEkgYm91bmRhcnkgdGhyb3VnaCByZXBvcnRBUElFeGNlcHRpb24uCiAgICAg
Ly8gVW50aWwgYSB0aW1lIGNvbWVzIHdoZXJlIGFuIGV4Y2VwdGlvbiBjYW4gYmUgY2F1c2VkIG91
dHNpZGUgb2YgdGhlIEFQSSAoZS5nLiBzZXRUaW1lb3V0CiAgICAgLy8gb3Igc29tZSBvdGhlciBh
c3luYyBvcGVyYXRpb24gaW4gYSBwdXJlIEpTQ29udGV4dCkgd2UgY2FuIGlnbm9yZSBleGNlcHRp
b25zIHJlcG9ydGVkIGhlcmUuCi0gICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSkgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVh
bCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKikg
Y29uc3Qgb3ZlcnJpZGUgeyB9CiAKICAgICBMaXN0ZW5lclNldCBtX2xpc3RlbmVyczsKICAgICBK
U0M6OkpTR2xvYmFsT2JqZWN0JiBtX2dsb2JhbE9iamVjdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5j
cHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogCiAjaW5jbHVkZSAiRGVidWdnZXJTY29wZS5oIgogI2luY2x1ZGUgIkVycm9yLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpT
Q2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUu
aCIKQEAgLTc1LDcgKzc2LDcgQEAgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjp+SlNKYXZhU2NyaXB0
Q2FsbAogCiBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGUoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIEV4Y2VwdGlvbiogZXhjZXB0
aW9uOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbCgpLmV2YWx1YXRlKGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgZXhjZXB0aW9uKTsKICAgICBpZiAoZXhj
ZXB0aW9uKQogICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxs
RnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0ph
dmFTY3JpcHRDYWxsRnJhbWUuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIHZtRW50cnlH
bG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLT52bUVudHJ5
R2xvYmFsT2JqZWN0KCk7IH0KIAogICAgIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLT50aGlzVmFsdWUoKTsgfQotICAgIEpTQzo6SlNW
YWx1ZSBldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNDOjpKU1ZhbHVlJiBleGNlcHRp
b24pIGNvbnN0ICB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0ZShzY3JpcHQs
IGV4Y2VwdGlvbik7IH0KKyAgICBKU0M6OkpTVmFsdWUgZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBz
Y3JpcHQsIEpTQzo6RXhjZXB0aW9uKiYgZXhjZXB0aW9uKSBjb25zdCAgeyByZXR1cm4gbV9kZWJ1
Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoc2NyaXB0LCBleGNlcHRpb24pOyB9CiAKIHByaXZhdGU6
CiAgICAgSmF2YVNjcmlwdENhbGxGcmFtZShQYXNzUmVmUHRyPEpTQzo6RGVidWdnZXJDYWxsRnJh
bWU+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0
YWNrRmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFj
a0ZhY3RvcnkuaCIKIAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgiCkBAIC0xMjgsMTAgKzEyOSwxMCBAQCBzdGF0aWMg
dm9pZCBleHRyYWN0U291cmNlSW5mb3JtYXRpb25Gcm9tCiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKIH0KIAotUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdENhbGxT
dGFja0Zyb21FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSYgZXhj
ZXB0aW9uLCBzaXplX3QgbWF4U3RhY2tTaXplKQorUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+
IGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24sIHNpemVfdCBtYXhTdGFja1NpemUpCiB7CiAgICAg
VmVjdG9yPFNjcmlwdENhbGxGcmFtZT4gZnJhbWVzOwotICAgIFJlZkNvdW50ZWRBcnJheTxTdGFj
a0ZyYW1lPiBzdGFja1RyYWNlID0gZXhlYy0+dm0oKS5leGNlcHRpb25TdGFjaygpOworICAgIFJl
ZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPiBzdGFja1RyYWNlID0gZXhjZXB0aW9uLT5zdGFjaygp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhY2tUcmFjZS5zaXplKCkgJiYgaSA8IG1h
eFN0YWNrU2l6ZTsgaSsrKSB7CiAgICAgICAgIHVuc2lnbmVkIGxpbmU7CiAgICAgICAgIHVuc2ln
bmVkIGNvbHVtbjsKQEAgLTE0MSw4ICsxNDIsOCBAQCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4gY3JlYXRlU2NyaXB0CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gZ2V0dGluZyBhdCBs
ZWFzdCB0aGUgbGluZSBhbmQgc291cmNlVVJMIGZyb20gdGhlIGV4Y2VwdGlvbiBvYmplY3QgaWYg
aXQgaGFzIHZhbHVlcyBhbmQgdGhlIGV4Y2VwdGlvblN0YWNrIGRvZXNuJ3QuCi0gICAgSlNPYmpl
Y3QqIGV4Y2VwdGlvbk9iamVjdCA9IGV4Y2VwdGlvbi50b09iamVjdChleGVjKTsKLSAgICBpZiAo
ZXhjZXB0aW9uLmlzT2JqZWN0KCkpIHsKKyAgICBpZiAoZXhjZXB0aW9uLT52YWx1ZSgpLmlzT2Jq
ZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbk9iamVjdCA9IGV4Y2VwdGlvbi0+
dmFsdWUoKS50b09iamVjdChleGVjKTsKICAgICAgICAgaW50IGxpbmVOdW1iZXI7CiAgICAgICAg
IGludCBjb2x1bW5OdW1iZXI7CiAgICAgICAgIFN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkw7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3Rv
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1Njcmlw
dENhbGxTdGFja0ZhY3RvcnkuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKK2NsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTVmFsdWU7
CiB9CkBAIC00Nyw3ICs0OCw3IEBAIGNsYXNzIFNjcmlwdENhbGxTdGFjazsKIC8vIEZJWE1FOiBU
aGUgc3VidGxlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlc2Ugc2hvdWxkIGJlIGVsaW1pbmF0ZWQu
CiBKU19FWFBPUlRfUFJJVkFURSBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2Ny
aXB0Q2FsbFN0YWNrKEpTQzo6RXhlY1N0YXRlKiwgc2l6ZV90IG1heFN0YWNrU2l6ZSk7CiBKU19F
WFBPUlRfUFJJVkFURSBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2Fs
bFN0YWNrRm9yQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSosIHNpemVfdCBtYXhTdGFja1NpemUpOwot
SlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlw
dENhbGxTdGFja0Zyb21FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUmIGV4
Y2VwdGlvbiwgc2l6ZV90IG1heFN0YWNrU2l6ZSk7CitKU19FWFBPUlRfUFJJVkFURSBQYXNzUmVm
UHRyPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKiwgc2l6ZV90IG1heFN0YWNrU2l6ZSk7CiBK
U19FWFBPUlRfUFJJVkFURSBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gY3JlYXRlU2NyaXB0
QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgc2tpcEFyZ3VtZW50Q291bnQpOwog
CiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxODUx
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiRGVidWdn
ZXJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJEZWJ1Z2dlclNjb3BlLmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAi
SlNMb2NrLmgiCiAjaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgpAQCAtOTMsNyArOTQs
NyBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpldmFsdWF0ZUJyZWFrcG9pCiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlRXZhbHVhdGU6
IHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0
aW9uOwogICAgICAgICBkZWJ1Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoYnJlYWtwb2ludEFjdGlv
bi5kYXRhLCBleGNlcHRpb24pOwogICAgICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICAgICAg
cmVwb3J0RXhjZXB0aW9uKGRlYnVnZ2VyQ2FsbEZyYW1lLT5leGVjKCksIGV4Y2VwdGlvbik7CkBA
IC0xMDMsMTMgKzEwNCwxMyBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpldmFsdWF0ZUJyZWFr
cG9pCiAgICAgICAgIGRpc3BhdGNoQnJlYWtwb2ludEFjdGlvblNvdW5kKGRlYnVnZ2VyQ2FsbEZy
YW1lLT5leGVjKCksIGJyZWFrcG9pbnRBY3Rpb24uaWRlbnRpZmllcik7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgU2NyaXB0QnJlYWtwb2ludEFjdGlvblR5cGVQcm9iZTogewotICAgICAgICBK
U1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0gZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKGJyZWFrcG9pbnRB
Y3Rpb24uZGF0YSwgZXhjZXB0aW9uKTsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAg
ICAgIHJlcG9ydEV4Y2VwdGlvbihkZWJ1Z2dlckNhbGxGcmFtZS0+ZXhlYygpLCBleGNlcHRpb24p
OwogICAgICAgICAKICAgICAgICAgSlNDOjpFeGVjU3RhdGUqIHN0YXRlID0gZGVidWdnZXJDYWxs
RnJhbWUtPnNjb3BlKCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHdyYXBwZWRSZXN1bHQgPSBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZShzdGF0ZS0+dm0oKSwgZXhjZXB0aW9uID8gZXhjZXB0aW9uIDogcmVzdWx0KTsKKyAgICAg
ICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgd3JhcHBlZFJlc3VsdCA9IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlKHN0YXRlLT52bSgpLCBleGNlcHRpb24gPyBleGNlcHRpb24tPnZhbHVlKCkgOiBy
ZXN1bHQpOwogICAgICAgICBkaXNwYXRjaEJyZWFrcG9pbnRBY3Rpb25Qcm9iZShzdGF0ZSwgYnJl
YWtwb2ludEFjdGlvbiwgd3JhcHBlZFJlc3VsdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTMwMiw3ICszMDMsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVCcmVha3BvaW50
CiAgICAgfQogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVFeGNlcHRpb25JbkJy
ZWFrcG9pbnRDb25kaXRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBleGNl
cHRpb24pIGNvbnN0Cit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVFeGNlcHRpb25JbkJy
ZWFrcG9pbnRDb25kaXRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBl
eGNlcHRpb24pIGNvbnN0CiB7CiAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2Vy
dmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3Jp
cHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcg
Kzc5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBydW5FdmVudExvb3BXaGlsZVBh
dXNlZCgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50U2NyaXB0KEpTQzo6RXhlY1N0
YXRlKikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qKSBjb25zdCA9IDA7
CiAKICAgICBib29sIGV2YWx1YXRlQnJlYWtwb2ludEFjdGlvbihjb25zdCBTY3JpcHRCcmVha3Bv
aW50QWN0aW9uJik7CiAKQEAgLTEwMSw3ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCBzb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlNvdXJjZVByb3ZpZGVyKiwg
aW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1zZykgb3ZlcnJpZGUgZmluYWw7CiAg
ICAgdmlydHVhbCBib29sIG5lZWRQYXVzZUhhbmRsaW5nKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBv
dmVycmlkZSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUJy
ZWFrcG9pbnRIaXQoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6QnJlYWtwb2ludCYp
IG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25JbkJyZWFr
cG9pbnRDb25kaXRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uKSBj
b25zdCBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXhjZXB0aW9uSW5C
cmVha3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qKSBjb25z
dCBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGF1c2UoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RGVidWdnZXI6OlJlYXNvbkZvclBhdXNlKSBvdmVycmlkZSBmaW5h
bDsKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cygp
IG92ZXJyaWRlIGZpbmFsOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsy
NCwxMSBAQAogI2RlZmluZSBDYWxsRnJhbWVfaAogCiAjaW5jbHVkZSAiQWJzdHJhY3RQQy5oIgot
I2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNTdGFjay5oIgogI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCiAjaW5jbHVkZSAiU3RhY2tW
aXNpdG9yLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJWTUVudHJ5UmVjb3JkLmgiCiAK
IG5hbWVzcGFjZSBKU0MgIHsKQEAgLTc1LDEzICs3NSw5IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAg
ICAgICAgLy8gQnV0IHRoZXkncmUgdXNlZCBpbiBtYW55IHBsYWNlcyBpbiBsZWdhY3kgY29kZSwg
c28gdGhleSdyZSBub3QgZ29pbmcgYXdheSBhbnkgdGltZSBzb29uLgogCiAgICAgICAgIHZvaWQg
Y2xlYXJFeGNlcHRpb24oKSB7IHZtKCkuY2xlYXJFeGNlcHRpb24oKTsgfQotICAgICAgICB2b2lk
IGNsZWFyU3VwcGxlbWVudGFyeUV4Y2VwdGlvbkluZm8oKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB2bSgpLmNsZWFyRXhjZXB0aW9uU3RhY2soKTsKLSAgICAgICAgfQogCi0gICAgICAgIEpTVmFs
dWUgZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gdm0oKS5leGNlcHRpb24oKTsgfQotICAgICAg
ICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuICF2bSgpLmV4Y2VwdGlvbigpLmlz
RW1wdHkoKTsgfQorICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJu
IHZtKCkuZXhjZXB0aW9uKCk7IH0KKyAgICAgICAgYm9vbCBoYWRFeGNlcHRpb24oKSBjb25zdCB7
IHJldHVybiAhIXZtKCkuZXhjZXB0aW9uKCk7IH0KIAogICAgICAgICBBdG9taWNTdHJpbmdUYWJs
ZSogYXRvbWljU3RyaW5nVGFibGUoKSBjb25zdCB7IHJldHVybiB2bSgpLmF0b21pY1N0cmluZ1Rh
YmxlKCk7IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMo
KSBjb25zdCB7IHJldHVybiAqdm0oKS5wcm9wZXJ0eU5hbWVzOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9u
IDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJEZWJ1Z2dl
ckNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkVycm9ySW5zdGFuY2UuaCIKICNpbmNsdWRlICJFdmFs
Q29kZUNhY2hlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9u
SGVscGVycy5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkpTQXJyYXku
aCIKQEAgLTY0OSwxMSArNjUwLDEyIEBAIHByaXZhdGU6CiAgICAgSGFuZGxlckluZm8qJiBtX2hh
bmRsZXI7CiB9OwogCi1ORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1bndp
bmQoVk1FbnRyeUZyYW1lKiYgdm1FbnRyeUZyYW1lLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEpT
VmFsdWUmIGV4Y2VwdGlvblZhbHVlKQorTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnBy
ZXRlcjo6dW53aW5kKFZNRW50cnlGcmFtZSomIHZtRW50cnlGcmFtZSwgQ2FsbEZyYW1lKiYgY2Fs
bEZyYW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgYm9vbCBpc1Rlcm1pbmF0aW9uID0gZmFs
c2U7CiAKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhjZXB0aW9uLT52YWx1ZSgpOwog
ICAgIEFTU0VSVCghZXhjZXB0aW9uVmFsdWUuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIWV4Y2Vw
dGlvblZhbHVlLmlzQ2VsbCgpIHx8IGV4Y2VwdGlvblZhbHVlLmFzQ2VsbCgpKTsKICAgICAvLyBU
aGlzIHNob3VsZG4ndCBiZSBwb3NzaWJsZSAoaGVuY2UgdGhlIGFzc2VydGlvbnMpLCBidXQgd2Un
cmUgYWxyZWFkeSBpbiB0aGUgc2xvd2VzdCBvZgpAQCAtNjYyLDEyICs2NjQsMTIgQEAgTkVWRVJf
SU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dQogICAgICAgICBleGNlcHRpb25WYWx1
ZSA9IGpzTnVsbCgpOwogCiAgICAgaWYgKGV4Y2VwdGlvblZhbHVlLmlzT2JqZWN0KCkpCi0gICAg
ICAgIGlzVGVybWluYXRpb24gPSBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oYXNPYmpl
Y3QoZXhjZXB0aW9uVmFsdWUpKTsKKyAgICAgICAgaXNUZXJtaW5hdGlvbiA9IGlzVGVybWluYXRl
ZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGNlcHRpb24pOwogCi0gICAgQVNTRVJUKGNhbGxGcmFtZS0+
dm0oKS5leGNlcHRpb25TdGFjaygpLnNpemUoKSk7CisgICAgQVNTRVJUKGNhbGxGcmFtZS0+dm0o
KS5leGNlcHRpb24oKSAmJiBjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKCktPnN0YWNrKCkuc2l6
ZSgpKTsKIAogICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2Jh
bE9iamVjdCgpLT5kZWJ1Z2dlcigpOwotICAgIGlmIChkZWJ1Z2dlciAmJiBkZWJ1Z2dlci0+bmVl
ZHNFeGNlcHRpb25DYWxsYmFja3MoKSkgeworICAgIGlmIChkZWJ1Z2dlciAmJiBkZWJ1Z2dlci0+
bmVlZHNFeGNlcHRpb25DYWxsYmFja3MoKSAmJiAhZXhjZXB0aW9uLT5kaWROb3RpZnlJbnNwZWN0
b3JPZlRocm93KCkpIHsKICAgICAgICAgLy8gV2UgbmVlZCB0byBjbGVhciB0aGUgZXhjZXB0aW9u
IGFuZCB0aGUgZXhjZXB0aW9uIHN0YWNrIGhlcmUgaW4gb3JkZXIgdG8gc2VlIGlmIGEgbmV3IGV4
Y2VwdGlvbiBoYXBwZW5zLgogICAgICAgICAvLyBBZnRlcndhcmRzLCB0aGUgdmFsdWVzIGFyZSBw
dXQgYmFjayB0byBjb250aW51ZSBwcm9jZXNzaW5nIHRoaXMgZXJyb3IuCiAgICAgICAgIENsZWFy
RXhjZXB0aW9uU2NvcGUgc2NvcGUoJmNhbGxGcmFtZS0+dm0oKSk7CkBAIC02NzYsMTggKzY3OCwy
MCBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1CiAgICAgICAgIC8v
IGZyYW1lcy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyMTc1NAogCi0gICAgICAgIGJvb2wgaGFzSGFuZGxlcjsKKyAgICAgICAgYm9vbCBoYXND
YXRjaEhhbmRsZXI7CiAgICAgICAgIGlmIChpc1Rlcm1pbmF0aW9uKQotICAgICAgICAgICAgaGFz
SGFuZGxlciA9IGZhbHNlOworICAgICAgICAgICAgaGFzQ2F0Y2hIYW5kbGVyID0gZmFsc2U7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgR2V0RXhjZXB0aW9uSGFuZGxlckZ1bmN0b3IgZnVu
Y3RvcjsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKLSAgICAgICAg
ICAgIGhhc0hhbmRsZXIgPSAhIWZ1bmN0b3IuaGFuZGxlcigpOworICAgICAgICAgICAgSGFuZGxl
ckluZm8qIGhhbmRsZXIgPSBmdW5jdG9yLmhhbmRsZXIoKTsKKyAgICAgICAgICAgIGhhc0NhdGNo
SGFuZGxlciA9IGhhbmRsZXIgJiYgaGFuZGxlci0+aXNDYXRjaEhhbmRsZXIoKTsKICAgICAgICAg
fQogCi0gICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1
ZSwgaGFzSGFuZGxlcik7CisgICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oY2FsbEZyYW1lLCBl
eGNlcHRpb25WYWx1ZSwgaGFzQ2F0Y2hIYW5kbGVyKTsKICAgICAgICAgQVNTRVJUKCFjYWxsRnJh
bWUtPmhhZEV4Y2VwdGlvbigpKTsKICAgICB9CisgICAgZXhjZXB0aW9uLT5zZXREaWROb3RpZnlJ
bnNwZWN0b3JPZlRocm93KCk7CiAKICAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRs
ZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgogICAgIEhhbmRsZXJJ
bmZvKiBoYW5kbGVyID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTAy
LDE2ICsxMDIsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBDbGVh
ckV4Y2VwdGlvblNjb3BlKFZNKiB2bSk6IG1fdm0odm0pCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHZtLT5nZXRFeGNlcHRpb25JbmZvKG9sZEV4Y2VwdGlvbiwgb2xkRXhjZXB0aW9uU3RhY2spOwor
ICAgICAgICAgICAgb2xkRXhjZXB0aW9uID0gdm0tPmV4Y2VwdGlvbigpOwogICAgICAgICAgICAg
dm0tPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIH0KICAgICAgICAgfkNsZWFyRXhjZXB0aW9u
U2NvcGUoKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX3ZtLT5zZXRFeGNlcHRpb25JbmZvKG9s
ZEV4Y2VwdGlvbiwgb2xkRXhjZXB0aW9uU3RhY2spOworICAgICAgICAgICAgbV92bS0+c2V0RXhj
ZXB0aW9uKG9sZEV4Y2VwdGlvbik7CiAgICAgICAgIH0KICAgICBwcml2YXRlOgotICAgICAgICBK
U0M6OkpTVmFsdWUgb2xkRXhjZXB0aW9uOwotICAgICAgICBSZWZDb3VudGVkQXJyYXk8SlNDOjpT
dGFja0ZyYW1lPiBvbGRFeGNlcHRpb25TdGFjazsKKyAgICAgICAgRXhjZXB0aW9uKiBvbGRFeGNl
cHRpb247CiAgICAgICAgIFZNKiBtX3ZtOwogICAgIH07CiAgICAgCkBAIC0yMTUsNyArMjE0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBTYW1wbGluZ1Rvb2wqIHNhbXBs
ZXIoKSB7IHJldHVybiBtX3NhbXBsZXIuZ2V0KCk7IH0KIAotICAgICAgICBORVZFUl9JTkxJTkUg
SGFuZGxlckluZm8qIHVud2luZChWTUVudHJ5RnJhbWUqJiwgQ2FsbEZyYW1lKiYsIEpTVmFsdWUm
KTsKKyAgICAgICAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiB1bndpbmQoVk1FbnRyeUZyYW1l
KiYsIENhbGxGcmFtZSomLCBFeGNlcHRpb24qKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQg
ZGVidWcoQ2FsbEZyYW1lKiwgRGVidWdIb29rSUQpOwogICAgICAgICBKU1N0cmluZyogc3RhY2tU
cmFjZUFzU3RyaW5nKEV4ZWNTdGF0ZSosIFZlY3RvcjxTdGFja0ZyYW1lPik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9u
IDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDcgKzIyMyw3IEBAIEFzc2VtYmx5SGVscGVyczo6SnVt
cCBBc3NlbWJseUhlbHBlcnM6OmUKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHJlc3VsdCA9IGJy
YW5jaFRlc3Q2NChraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gTm9uWmVybyA6IFplcm8s
IEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOwogI2VsaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICByZXN1bHQgPSBicmFuY2gzMihraW5kID09IE5vcm1hbEV4Y2Vw
dGlvbkNoZWNrID8gTm90RXF1YWwgOiBFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKTsKKyAgICByZXN1bHQgPSBicmFuY2gzMihraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNo
ZWNrID8gTm90RXF1YWwgOiBFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4
Y2VwdGlvbigpKSwgVHJ1c3RlZEltbTMyKDApKTsKICNlbmRpZgogICAgIAogICAgIGlmICh3aWR0
aCA9PSBOb3JtYWxKdW1wV2lkdGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEV4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURXhjZXB0aW9ucy5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE2ICs0MCwx
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhl
Y1N0YXRlKiBjYWxsRnJhbWUsIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUpCit2b2lkIGdlbmVyaWNV
bndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFtZSkKIHsKICAgICBpZiAoT3B0aW9uczo6
YnJlYWtPblRocm93KCkpIHsKICAgICAgICAgZGF0YUxvZygiSW4gY2FsbCBmcmFtZSAiLCBSYXdQ
b2ludGVyKGNhbGxGcmFtZSksICIgZm9yIGNvZGUgYmxvY2sgIiwgKmNhbGxGcmFtZS0+Y29kZUJs
b2NrKCksICJcbiIpOwogICAgICAgICBDUkFTSCgpOwogICAgIH0KICAgICAKLSAgICBSRUxFQVNF
X0FTU0VSVChleGNlcHRpb25WYWx1ZSk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSB2bS0+
ZXhjZXB0aW9uKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uKTsKICAgICBWTUVudHJ5
RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgSGFuZGxlcklu
Zm8qIGhhbmRsZXIgPSB2bS0+aW50ZXJwcmV0ZXItPnVud2luZCh2bUVudHJ5RnJhbWUsIGNhbGxG
cmFtZSwgZXhjZXB0aW9uVmFsdWUpOyAvLyBUaGlzIG1heSB1cGRhdGUgdm1FbnRyeUZyYW1lIGFu
ZCBjYWxsRnJhbWUuCisgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSB2bS0+aW50ZXJwcmV0ZXIt
PnVud2luZCh2bUVudHJ5RnJhbWUsIGNhbGxGcmFtZSwgZXhjZXB0aW9uKTsgLy8gVGhpcyBtYXkg
dXBkYXRlIHZtRW50cnlGcmFtZSBhbmQgY2FsbEZyYW1lLgogCiAgICAgdm9pZCogY2F0Y2hSb3V0
aW5lOwogICAgIEluc3RydWN0aW9uKiBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSAwOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmgJKHJldmlzaW9uIDE4NTEx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgRXhlY1N0YXRl
OwogY2xhc3MgVk07CiAKLXZvaWQgZ2VuZXJpY1Vud2luZChWTSosIEV4ZWNTdGF0ZSosIEpTVmFs
dWUgZXhjZXB0aW9uVmFsdWUpOwordm9pZCBnZW5lcmljVW53aW5kKFZNKiwgRXhlY1N0YXRlKik7
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkRlYnVn
Z2VyLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKQEAgLTk3LDcgKzk4LDcg
QEAgSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdgogI2VuZGlmIC8vIENQ
VShYODYpCiAKICAgICAvLyBDaGVjayBmb3IgYW4gZXhjZXB0aW9uCi0gICAgSnVtcCBzYXdFeGNl
cHRpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHZtLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSk7IAorICAgIEp1bXAgc2F3RXhjZXB0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRl
QWRkcmVzcyh2bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpLCBUcnVzdGVkSW1tMzIoMCkpOwogCiAg
ICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAvLyBSZXR1cm4uCkBAIC04MjksMTMgKzgz
MCwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VyCiAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAKICAgICAvLyBOb3cgc3RvcmUgdGhlIGV4Y2VwdGlvbiByZXR1cm5lZCBieSBvcGVyYXRpb25U
aHJvdy4KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwotICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihKU1ZhbHVlKCkucGF5bG9hZCgpKSwgQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlv
bk9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7
Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZSgpLnRhZygpKSwgQWRkcmVzcyhyZWdU
MywgVk06OmV4Y2VwdGlvbk9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNl
dCgpKSwgcmVnVDIpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBy
ZWdUMSk7CisKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMywgVk06
OmV4Y2VwdGlvbk9mZnNldCgpKSk7CiAKICAgICB1bnNpZ25lZCBleGNlcHRpb24gPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGVtaXRTdG9yZShleGNlcHRpb24sIHJlZ1Qx
LCByZWdUMCk7CisgICAgZW1pdFN0b3JlKGV4Y2VwdGlvbiwgcmVnVDEsIHJlZ1QyKTsKKworICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QyLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7CisgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDIsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOworCisgICAgdW5zaWduZWQgdGhyb3du
VmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGVtaXRTdG9yZSh0
aHJvd25WYWx1ZSwgcmVnVDEsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2ltbShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiQmFzaWNCbG9ja0xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiQ29w
aWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb24uaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTQXJyYXkuaCIKQEAgLTUyOSw2ICs1MzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
YXRjaChJbnN0cnVjdGlvbiogY3VyCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpleGNl
cHRpb25PZmZzZXQoKSksIHJlZ1QwKTsKICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQo
KSkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCk7CisKKyAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRXhjZXB0aW9uOjp2YWx1ZU9m
ZnNldCgpKSwgcmVnVDApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0o
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTgyMyw3ICsxODIzLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93KEV4ZWNT
dAogICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb25WYWx1ZSk7CiAKICAgICAv
LyBSZXN1bHRzIHN0b3JlZCBvdXQtb2YtYmFuZCBpbiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJv
dywgdm0uY2FsbEZyYW1lRm9yVGhyb3cgJiB2bS52bUVudHJ5RnJhbWVGb3JUaHJvdwotICAgIGdl
bmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKKyAgICBnZW5lcmljVW53aW5k
KHZtLCBleGVjKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZsdXNoV3JpdGVC
YXJyaWVyQnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQpAQCAtMTg2MywxMCAr
MTg2Myw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGUKIHsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAotICAgIEpTVmFsdWUg
ZXhjZXB0aW9uVmFsdWUgPSB2bS0+ZXhjZXB0aW9uKCk7Ci0gICAgQVNTRVJUKGV4Y2VwdGlvblZh
bHVlKTsKLSAgICAKLSAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSk7
CisgICAgQVNTRVJUKHZtLT5leGNlcHRpb24oKSk7CisgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhl
Yyk7CiAgICAgQVNTRVJUKHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKQEAgLTE4
NzgsMTAgKzE4NzYsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxl
CiAKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIHZtRW50
cnlGcmFtZSwgY2FsbGVyRnJhbWUpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IHZt
LT5leGNlcHRpb24oKTsKLSAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwotICAgIAotICAgIGdl
bmVyaWNVbndpbmQodm0sIGNhbGxlckZyYW1lLCBleGNlcHRpb25WYWx1ZSk7CisgICAgQVNTRVJU
KHZtLT5leGNlcHRpb24oKSk7CisgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbGVyRnJhbWUpOwog
ICAgIEFTU0VSVCh2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwogfQogCkBAIC0xODkwLDcg
KzE4ODYsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVk1IYW5kbGVFeGNlCiAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CiAKLSAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjLCB2bS0+ZXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVCh2bS0+ZXhjZXB0aW9uKCkpOworICAgIGdlbmVyaWNVbndpbmQodm0sIGV4
ZWMpOwogfQogCiAvLyBUaGlzIGZ1bmN0aW9uICJzaG91bGQiIGp1c3QgdGFrZSB0aGUgRXhlY1N0
YXRlKiwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9u
IDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQ5LDggKzM0OSw4IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbmF0aXZlRm9yR2UKICNlbHNlCiAgICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgZXhj
ZXB0aW9uSGFuZGxlciA9IGppdC5icmFuY2gzMigKICAgICAgICAgSlNJbnRlcmZhY2VKSVQ6Ok5v
dEVxdWFsLAotICAgICAgICBKU0ludGVyZmFjZUpJVDo6QWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHZtLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLAotICAgICAgICBKU0ludGVy
ZmFjZUpJVDo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICAgICAg
SlNJbnRlcmZhY2VKSVQ6OkFic29sdXRlQWRkcmVzcyh2bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkp
LAorICAgICAgICBKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDApKTsKICNlbmRpZgogCiAg
ICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAkocmV2aXNpb24g
MTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJh
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDb21t
b25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkRpcmVjdEFy
Z3VtZW50cy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUu
aCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNp
b24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3Niw3ICsxMzc2LDcgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2hhbmRsZV9leAogewogICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygp
OwogICAgIEFTU0VSVCh2bS5leGNlcHRpb24oKSk7Ci0gICAgZ2VuZXJpY1Vud2luZCgmdm0sIGV4
ZWMsIHZtLmV4Y2VwdGlvbigpKTsKKyAgICBnZW5lcmljVW53aW5kKCZ2bSwgZXhlYyk7CiAgICAg
TExJTlRfRU5EX0lNUEwoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE4
NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02OTMsNyArNjkzLDcgQEAgbWFjcm8gYnJhbmNo
SWZFeGNlcHRpb24obGFiZWwpCiAgICAgbG9hZHAgQ2FsbGVlICsgUGF5bG9hZE9mZnNldFtjZnJd
LCB0MwogICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MwogICAgIGxvYWRwIE1hcmtlZEJsb2Nr
OjptX3dlYWtTZXQgKyBXZWFrU2V0OjptX3ZtW3QzXSwgdDMKLSAgICBiaWVxIFZNOjptX2V4Y2Vw
dGlvbiArIFRhZ09mZnNldFt0M10sIEVtcHR5VmFsdWVUYWcsIC5ub0V4Y2VwdGlvbgorICAgIGJ0
aXogVk06Om1fZXhjZXB0aW9uW3QzXSwgLm5vRXhjZXB0aW9uCiAgICAgam1wIGxhYmVsCiAubm9F
eGNlcHRpb246CiBlbmQKQEAgLTE5NTIsMTUgKzE5NTIsMjAgQEAgX2xsaW50X29wX2NhdGNoOgog
ICAgIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRlckNhbGwoKQogCiAgICAgbG9hZGkgVk06OnRhcmdl
dEludGVycHJldGVyUENGb3JUaHJvd1t0M10sIFBDCi0gICAgbG9hZGkgVk06Om1fZXhjZXB0aW9u
ICsgUGF5bG9hZE9mZnNldFt0M10sIHQwCi0gICAgbG9hZGkgVk06Om1fZXhjZXB0aW9uICsgVGFn
T2Zmc2V0W3QzXSwgdDEKLSAgICBzdG9yZWkgMCwgVk06Om1fZXhjZXB0aW9uICsgUGF5bG9hZE9m
ZnNldFt0M10KLSAgICBzdG9yZWkgRW1wdHlWYWx1ZVRhZywgVk06Om1fZXhjZXB0aW9uICsgVGFn
T2Zmc2V0W3QzXQorICAgIGxvYWRpIFZNOjptX2V4Y2VwdGlvblt0M10sIHQwCisgICAgc3RvcmVp
IDAsIFZNOjptX2V4Y2VwdGlvblt0M10KICAgICBsb2FkaSA0W1BDXSwgdDIKICAgICBzdG9yZWkg
dDAsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MiwgOF0KKyAgICBzdG9yZWkgQ2VsbFRhZywgVGFnT2Zm
c2V0W2NmciwgdDIsIDhdCisKKyAgICBsb2FkaSBFeGNlcHRpb246Om1fdmFsdWUgKyBUYWdPZmZz
ZXRbdDBdLCB0MQorICAgIGxvYWRpIEV4Y2VwdGlvbjo6bV92YWx1ZSArIFBheWxvYWRPZmZzZXRb
dDBdLCB0MAorICAgIGxvYWRpIDhbUENdLCB0MgorICAgIHN0b3JlaSB0MCwgUGF5bG9hZE9mZnNl
dFtjZnIsIHQyLCA4XQogICAgIHN0b3JlaSB0MSwgVGFnT2Zmc2V0W2NmciwgdDIsIDhdCisKICAg
ICB0cmFjZUV4ZWN1dGlvbigpICAjIFRoaXMgbmVlZHMgdG8gYmUgaGVyZSBiZWNhdXNlIHdlIGRv
bid0IHdhbnQgdG8gY2xvYmJlciB0MCwgdDEsIHQyLCB0MyBhYm92ZS4KLSAgICBkaXNwYXRjaCgy
KQorICAgIGRpc3BhdGNoKDMpCiAKIF9sbGludF9vcF9lbmQ6CiAgICAgdHJhY2VFeGVjdXRpb24o
KQpAQCAtMjAzOCw3ICsyMDQzLDcgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0
YWJsZU9mZgogICAgIGVuZAogICAgIAogICAgIGZ1bmN0aW9uRXBpbG9ndWUoKQotICAgIGJpbmVx
IFZNOjptX2V4Y2VwdGlvbiArIFRhZ09mZnNldFt0M10sIEVtcHR5VmFsdWVUYWcsIC5oYW5kbGVF
eGNlcHRpb24KKyAgICBidGlueiBWTTo6bV9leGNlcHRpb25bdDNdLCAuaGFuZGxlRXhjZXB0aW9u
CiAgICAgcmV0CiAKIC5oYW5kbGVFeGNlcHRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24g
MTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE4MjAsMTIgKzE4MjAsMTggQEAgX2xsaW50X29w
X2NhdGNoOgogICAgIGxvYWRwIFZNOjp0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3dbdDNdLCBQ
QwogICAgIHN1YnAgUEIsIFBDCiAgICAgcnNoaWZ0cCAzLCBQQworCiAgICAgbG9hZHEgVk06Om1f
ZXhjZXB0aW9uW3QzXSwgdDAKICAgICBzdG9yZXEgMCwgVk06Om1fZXhjZXB0aW9uW3QzXQogICAg
IGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MikKICAgICBzdG9yZXEgdDAsIFtjZnIsIHQyLCA4
XQorCisgICAgbG9hZHEgRXhjZXB0aW9uOjptX3ZhbHVlW3QwXSwgdDMKKyAgICBsb2FkaXNGcm9t
SW5zdHJ1Y3Rpb24oMiwgdDIpCisgICAgc3RvcmVxIHQzLCBbY2ZyLCB0MiwgOF0KKwogICAgIHRy
YWNlRXhlY3V0aW9uKCkKLSAgICBkaXNwYXRjaCgyKQorICAgIGRpc3BhdGNoKDMpCiAKIAogX2xs
aW50X29wX2VuZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0
cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODExLDEwICs4
MTEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBUcnlO
b2RlOjpUcnlOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFN0YXRlbWVudE5v
ZGUqIHRyeUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBleGNlcHRpb25JZGVudCwgU3RhdGVtZW50
Tm9kZSogY2F0Y2hCbG9jaywgU3RhdGVtZW50Tm9kZSogZmluYWxseUJsb2NrKQorICAgIGlubGlu
ZSBUcnlOb2RlOjpUcnlOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFN0YXRl
bWVudE5vZGUqIHRyeUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiB0aHJvd25WYWx1ZUlkZW50LCBT
dGF0ZW1lbnROb2RlKiBjYXRjaEJsb2NrLCBTdGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2spCiAg
ICAgICAgIDogU3RhdGVtZW50Tm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX3RyeUJsb2NrKHRy
eUJsb2NrKQotICAgICAgICAsIG1fZXhjZXB0aW9uSWRlbnQoZXhjZXB0aW9uSWRlbnQpCisgICAg
ICAgICwgbV90aHJvd25WYWx1ZUlkZW50KHRocm93blZhbHVlSWRlbnQpCiAgICAgICAgICwgbV9j
YXRjaEJsb2NrKGNhdGNoQmxvY2spCiAgICAgICAgICwgbV9maW5hbGx5QmxvY2soZmluYWxseUJs
b2NrKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlz
aW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTUxMSw3ICsxNTExLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApIG92ZXJyaWRlOwogCiAgICAgICAgIFN0YXRlbWVudE5vZGUqIG1fdHJ5QmxvY2s7Ci0g
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1fZXhjZXB0aW9uSWRlbnQ7CisgICAgICAgIGNvbnN0
IElkZW50aWZpZXImIG1fdGhyb3duVmFsdWVJZGVudDsKICAgICAgICAgU3RhdGVtZW50Tm9kZSog
bV9jYXRjaEJsb2NrOwogICAgICAgICBTdGF0ZW1lbnROb2RlKiBtX2ZpbmFsbHlCbG9jazsKICAg
ICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAko
cmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2lu
Y2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUg
IkpTRnVuY3Rpb24uaCIKQEAgLTM5LDE1ICs0MCwxNSBAQCBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGZ1CiAgICAgcmV0dXJuIGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1
dGVDYWxsKGV4ZWMsIGFzT2JqZWN0KGZ1bmN0aW9uT2JqZWN0KSwgY2FsbFR5cGUsIGNhbGxEYXRh
LCB0aGlzVmFsdWUsIGFyZ3MpOwogfQogCi1KU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEm
IGNhbGxEYXRhLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgSlNWYWx1
ZSogZXhjZXB0aW9uKQorSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5j
dGlvbk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIEV4Y2VwdGlvbiomIHJldHVy
bmVkRXhjZXB0aW9uKQogewogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlv
bk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAg
ICAgKmV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm5lZEV4Y2Vw
dGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CisgICAgfSBlbHNlCisgICAg
ICAgIHJldHVybmVkRXhjZXB0aW9uID0gbnVsbHB0cjsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWxsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhbGxEYXRhLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhbGxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAK
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBBcmdMaXN0OworY2xhc3MgRXhjZXB0aW9uOwogY2xh
c3MgRXhlY1N0YXRlOwogY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogY2xhc3MgSlNPYmplY3Q7
CkBAIC01OCw3ICs1OSw3IEBAIHVuaW9uIENhbGxEYXRhIHsKIH07CiAKIEpTX0VYUE9SVF9QUklW
QVRFIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxs
VHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
OwotSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVu
Y3Rpb25PYmplY3QsIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiwgSlNWYWx1ZSogZXhjZXB0aW9uKTsKK0pTX0VYUE9SVF9QUklWQVRF
IEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlw
ZSwgY29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYsIEV4
Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZp
c2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFt
ZS5oIgogI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKQEAgLTYwLDE5ICs2MSwx
OCBAQCBib29sIGNoZWNrU3ludGF4KFZNJiB2bSwgY29uc3QgU291cmNlQ29kCiAgICAgICAgIEpT
UGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0LCBKU1BhcnNlckNvZGVUeXBlOjpQcm9ncmFtLCBl
cnJvcik7CiB9CiAKLUpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2Vw
dGlvbikKK0pTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlv
bikKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBSRUxFQVNFX0FTU0VSVChl
eGVjLT52bSgpLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0
cmluZ1RhYmxlKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT52bSgpLmlzQ29sbGVjdG9y
QnVzeSgpKTsKKyAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IG51bGxwdHI7CiAKICAgICBDb2RlUHJv
ZmlsaW5nIHByb2ZpbGUoc291cmNlKTsKIAogICAgIFByb2dyYW1FeGVjdXRhYmxlKiBwcm9ncmFt
ID0gUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLCBzb3VyY2UpOwogICAgIGlmICghcHJv
Z3JhbSkgewotICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCi0gICAgICAgICAgICAqcmV0
dXJuZWRFeGNlcHRpb24gPSBleGVjLT52bSgpLmV4Y2VwdGlvbigpOwotCisgICAgICAgIHJldHVy
bmVkRXhjZXB0aW9uID0gZXhlYy0+dm0oKS5leGNlcHRpb24oKTsKICAgICAgICAgZXhlYy0+dm0o
KS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CkBAIC04Myw5ICs4Myw3IEBAIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUocHJv
Z3JhbSwgZXhlYywgdGhpc09iaik7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
LSAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAgICAgICAgKnJldHVybmVkRXhj
ZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0KKyAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24g
PSBleGVjLT5leGNlcHRpb24oKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw3ICsyNiw4IEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
LSAgICAKKworY2xhc3MgRXhjZXB0aW9uOwogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSlNTY29w
ZTsKIGNsYXNzIFBhcnNlckVycm9yOwpAQCAtMzUsNyArMzYsMTIgQEAgY2xhc3MgVk07CiAKIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgY2hlY2tTeW50YXgoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwg
UGFyc2VyRXJyb3ImKTsKIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2hlY2tTeW50YXgoRXhlY1N0
YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDApOwotSlNfRVhQ
T1JUX1BSSVZBVEUgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2Rl
JiwgSlNWYWx1ZSB0aGlzVmFsdWUgPSBKU1ZhbHVlKCksIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDAp
OworSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqLCBjb25zdCBT
b3VyY2VDb2RlJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIEV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0
aW9uKTsKK2lubGluZSBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291
cmNlQ29kZSYgc291cmNlQ29kZSwgSlNWYWx1ZSB0aGlzVmFsdWUgPSBKU1ZhbHVlKCkpCit7Cisg
ICAgRXhjZXB0aW9uKiB1bnVzZWQ7CisgICAgcmV0dXJuIGV2YWx1YXRlKGV4ZWMsIHNvdXJjZUNv
ZGUsIHRoaXNWYWx1ZSwgdW51c2VkKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuaAkocmV2aXNpb24gMTg1MTEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NzYsNiArNzYsNyBAQCBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdGhyb3dUeXBlRXJyCiBK
U19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdGhyb3dTeW50YXhFcnJvcihFeGVjU3RhdGUqKTsK
IAogLy8gQ29udmVuaWVuY2Ugd3JhcHBlcnMsIHdyYXAgcmVzdWx0IGFzIGFuIEVuY29kZWRKU1Zh
bHVlLgoraW5saW5lIHZvaWQgdGhyb3dWTUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9u
KiBleGNlcHRpb24pIHsgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24p
OyB9CiBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTUVycm9yKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBlcnJvcikgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgZXJyb3IpKTsgfQogaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1U
eXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dU
eXBlRXJyb3IoZXhlYykpOyB9CiBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTVR5cGVFcnJv
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7IHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlKSk7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b24uaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Nv
bnN0IENsYXNzSW5mbyBFeGNlcHRpb246OnNfaW5mbyA9IHsgIkV4Y2VwdGlvbiIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRXhjZXB0aW9uKSB9OworCitFeGNlcHRpb24q
IEV4Y2VwdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNWYWx1ZSB0aHJvd25WYWx1ZSkKK3sKKyAgICBF
eGNlcHRpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEV4Y2VwdGlvbj4o
dm0uaGVhcCkpIEV4Y2VwdGlvbih2bSwgdGhyb3duVmFsdWUpOworICAgIHJlc3VsdC0+ZmluaXNo
Q3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgRXhjZXB0aW9uOjpk
ZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHN0YXRp
Y19jYXN0PEV4Y2VwdGlvbio+KGNlbGwpOworICAgIGV4Y2VwdGlvbi0+RXhjZXB0aW9uOjp+RXhj
ZXB0aW9uKCk7Cit9CisKK1N0cnVjdHVyZSogRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sK
KyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3Zv
aWQgRXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgRXhjZXB0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEV4Y2VwdGlvbio+
KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworCisgICAg
aWYgKCF0aGlzT2JqZWN0LT5tX3ZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF0aGlz
T2JqZWN0LT5tX3ZhbHVlLmdldCgpLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm47CisgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdmFsdWUpOworfQorCitFeGNlcHRpb246OkV4Y2Vw
dGlvbihWTSYgdm0sIEpTVmFsdWUgdGhyb3duVmFsdWUpCisgICAgOiBCYXNlKHZtLCB2bS5leGNl
cHRpb25TdHJ1Y3R1cmUuZ2V0KCkpCit7CisgICAgbV92YWx1ZS5zZXQodm0sIHRoaXMsIHRocm93
blZhbHVlKTsKKworICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOworICAgIHZtLmlu
dGVycHJldGVyLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UpOworICAgIG1fc3RhY2sgPSBSZWZD
b3VudGVkQXJyYXk8U3RhY2tGcmFtZT4oc3RhY2tUcmFjZSk7Cit9CisKK0V4Y2VwdGlvbjo6fkV4
Y2VwdGlvbigpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBFeGNlcHRpb25faAorI2RlZmluZSBFeGNlcHRpb25faAorCisjaW5jbHVkZSAiSW50ZXJw
cmV0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+CisKK25hbWVzcGFjZSBK
U0MgeworICAgIAorY2xhc3MgRXhjZXB0aW9uIDogcHVibGljIEpTT2JqZWN0IHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIEpTT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1vcnRhbCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdz
OworCisgICAgc3RhdGljIEV4Y2VwdGlvbiogY3JlYXRlKFZNJiwgSlNWYWx1ZSB0aHJvd25WYWx1
ZSk7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7
CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgc3RhdGljIHB0cmRpZmZfdCB2YWx1
ZU9mZnNldCgpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4Y2VwdGlv
biwgbV92YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIEV4Y2VwdGlvbiogY2FzdChKU1ZhbHVl
IGV4Y2VwdGlvbkFzSlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc0Nhc3Q8RXhjZXB0
aW9uKj4oZXhjZXB0aW9uQXNKU1ZhbHVlLmFzQ2VsbCgpKTsKKyAgICB9CisKKyAgICBKU1ZhbHVl
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQorICAgIGNvbnN0IFJlZkNv
dW50ZWRBcnJheTxTdGFja0ZyYW1lPiYgc3RhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YWNrOyB9
CisKKyAgICBib29sIGRpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3coKSBjb25zdCB7IHJldHVybiBt
X2RpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3c7IH0KKyAgICB2b2lkIHNldERpZE5vdGlmeUluc3Bl
Y3Rvck9mVGhyb3coKSB7IG1fZGlkTm90aWZ5SW5zcGVjdG9yT2ZUaHJvdyA9IHRydWU7IH0KKwor
ICAgIH5FeGNlcHRpb24oKTsKKworcHJpdmF0ZToKKyAgICBFeGNlcHRpb24oVk0mLCBKU1ZhbHVl
IHRocm93blZhbHVlKTsKKworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZhbHVlOworICAg
IFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPiBtX3N0YWNrOworICAgIGJvb2wgbV9kaWROb3Rp
ZnlJbnNwZWN0b3JPZlRocm93IHsgZmFsc2UgfTsKKworICAgIGZyaWVuZCBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEV4
Y2VwdGlvbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25I
ZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb25IZWxwZXJzLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDYWxsRnJhbWUu
aCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24u
aCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpTTm90
QW5PYmplY3QuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtNTksMTcgKzYwLDExIEBA
IEpTT2JqZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXAKICAgICByZXR1cm4gVGVy
bWluYXRlZEV4ZWN1dGlvbkVycm9yOjpjcmVhdGUoKnZtKTsKIH0KIAotYm9vbCBpc1Rlcm1pbmF0
ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNPYmplY3QqIG9iamVjdCkKK2Jvb2wgaXNUZXJtaW5hdGVk
RXhlY3V0aW9uRXhjZXB0aW9uKEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewotICAgIHJldHVybiBv
YmplY3QtPmluaGVyaXRzKFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6aW5mbygpKTsKKyAgICBy
ZXR1cm4gZXhjZXB0aW9uLT52YWx1ZSgpLmluaGVyaXRzKFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJv
cjo6aW5mbygpKTsKIH0KIAotYm9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUuaW5oZXJpdHMoVGVybWluYXRlZEV4ZWN1
dGlvbkVycm9yOjppbmZvKCkpOwotfQotCi0KIEpTT2JqZWN0KiBjcmVhdGVTdGFja092ZXJmbG93
RXJyb3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQuIikpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBl
cnMuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw3IEBAIG5hbWVz
cGFjZSBKU0MgewogdHlwZWRlZiBKU09iamVjdCogKCpFcnJvckZhY3RvcnkpKEV4ZWNTdGF0ZSos
IGNvbnN0IFN0cmluZyYsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsKIAogSlNPYmpl
Y3QqIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oVk0qKTsKLWJvb2wgaXNUZXJt
aW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTT2JqZWN0Kik7Ci1KU19FWFBPUlRfUFJJVkFURSBi
b29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU1ZhbHVlKTsKK0pTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEV4Y2VwdGlvbiopOwog
SlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSosIEpTVmFs
dWUsIGNvbnN0IFN0cmluZyYsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsKIEpTX0VY
UE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRl
Kik7CiBKU09iamVjdCogY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZXR0ZXJTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dldHRlclNldHRlci5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYg
KzI0LDcgQEAKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKIAogI2luY2x1ZGUgIkVycm9yLmgi
CisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTc1LDcgKzc2
LDcgQEAgSlNWYWx1ZSBjYWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIC8vIEZJ
WE1FOiBTb21lIGNhbGxlcnMgbWF5IGludm9rZSBnZXQoKSB3aXRob3V0IGNoZWNraW5nIGZvciBh
biBleGNlcHRpb24gZmlyc3QuCiAgICAgLy8gV2Ugd29yayBhcm91bmQgdGhhdCBieSBjaGVja2lu
ZyBoZXJlLgogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGV4
ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVl
KCk7CiAKICAgICBKU09iamVjdCogZ2V0dGVyID0ganNDYXN0PEdldHRlclNldHRlcio+KGdldHRl
clNldHRlciktPmdldHRlcigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgSlNWYWx1ZSBpdGVyYXRvclN0ZXAoRXhlY1N0
YXRlKiBleGVjLCBKUwogCiB2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGl0ZXJhdG9yKQogewotICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIEV4Y2VwdGlvbiog
ZXhjZXB0aW9uID0gbnVsbHB0cjsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAg
ICAgICAgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmEKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHJldHVybkZ1bmN0aW9u
LmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgaWYgKCFleGNlcHRpb24uaXNFbXB0eSgpKQorICAg
ICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBleGNlcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA3LDcgKzEw
Nyw3IEBAIHZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICBDYWxs
RGF0YSByZXR1cm5GdW5jdGlvbkNhbGxEYXRhOwogICAgIENhbGxUeXBlIHJldHVybkZ1bmN0aW9u
Q2FsbFR5cGUgPSBnZXRDYWxsRGF0YShyZXR1cm5GdW5jdGlvbiwgcmV0dXJuRnVuY3Rpb25DYWxs
RGF0YSk7CiAgICAgaWYgKHJldHVybkZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7
Ci0gICAgICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKGV4Y2VwdGlv
bikKICAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CkBAIC0x
MTcsNyArMTE3LDcgQEAgdm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQog
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHJldHVybkZ1bmN0aW9uQXJndW1lbnRzOwogICAgIEpT
VmFsdWUgaW5uZXJSZXN1bHQgPSBjYWxsKGV4ZWMsIHJldHVybkZ1bmN0aW9uLCByZXR1cm5GdW5j
dGlvbkNhbGxUeXBlLCByZXR1cm5GdW5jdGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgcmV0dXJuRnVu
Y3Rpb25Bcmd1bWVudHMpOwogCi0gICAgaWYgKCFleGNlcHRpb24uaXNFbXB0eSgpKSB7CisgICAg
aWYgKGV4Y2VwdGlvbikgewogICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMs
IGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRl
ICJEYXRlUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJHZXR0
ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJJbmRleGluZ0hlYWRlcklubGluZXMuaCIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogI2lmIEVOQUJMRShQUk9NSVNFUykKIAogI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVk
ZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCkBAIC0x
MzYsNyArMTM3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwog
CiAgICAgLy8gMTQuIElmIHJlc3VsdCBpcyBhbiBhYnJ1cHQgY29tcGxldGlvbiwgY2FsbCBQcm9t
aXNlUmVqZWN0KHByb21pc2UsIHJlc3VsdC5bW3ZhbHVlXV0pLgogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlv
bigpOworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1
ZSgpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgICAgIHByb21pc2Ut
PnJlamVjdCh2bSwgZXhjZXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShQUk9NSVNFUykKIAogI2lu
Y2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSlNW
YWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQ
cm9taXNlLmgiCkBAIC0xNTAsNyArMTUxLDcgQEAgVGhlbmFibGVTdGF0dXMgdXBkYXRlRGVmZXJy
ZWRGcm9tUG90ZW50aQogICAgICAgICAvLyBpLiBMZXQgJ3JlamVjdFJlc3VsdCcgYmUgdGhlIHJl
c3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YKICAgICAgICAg
Ly8gICAgZGVmZXJyZWQuW1tSZWplY3RdXSB3aXRoIHVuZGVmaW5lZCBhcyB0aGlzQXJndW1lbnQg
YW5kIGEgTGlzdCBjb250YWluaW5nCiAgICAgICAgIC8vICAgIHRoZW4uW1t2YWx1ZV1dIGFzIGFy
Z3VtZW50c0xpc3QuCi0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9u
KCk7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVl
KCk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgcGVyZm9ybURl
ZmVycmVkUmVqZWN0KGV4ZWMsIGRlZmVycmVkLCBleGNlcHRpb24pOwpAQCAtMTg1LDcgKzE4Niw3
IEBAIFRoZW5hYmxlU3RhdHVzIHVwZGF0ZURlZmVycmVkRnJvbVBvdGVudGkKICAgICAgICAgLy8g
aS4gTGV0ICdyZWplY3RSZXN1bHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxs
XV0gaW50ZXJuYWwgbWV0aG9kIG9mCiAgICAgICAgIC8vICAgIGRlZmVycmVkLltbUmVqZWN0XV0g
d2l0aCB1bmRlZmluZWQgYXMgdGhpc0FyZ3VtZW50IGFuZCBhIExpc3QgY29udGFpbmluZwogICAg
ICAgICAvLyAgICB0aGVuQ2FsbFJlc3VsdC5bW3ZhbHVlXV0gYXMgYXJndW1lbnRzTGlzdC4KLSAg
ICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgSlNW
YWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKTsKICAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAgICAgICBwZXJmb3JtRGVmZXJyZWRSZWplY3QoZXhl
YywgZGVmZXJyZWQsIGV4Y2VwdGlvbik7CkBAIC0yMjgsNyArMjI5LDcgQEAgdm9pZCBwZXJmb3Jt
RGVmZXJyZWRSZWplY3QoRXhlY1N0YXRlKiBleAogSlNWYWx1ZSBhYnJ1cHRSZWplY3Rpb24oRXhl
Y1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQpCiB7CiAgICAgQVNTRVJU
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKLSAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gZXhlYy0+ZXhj
ZXB0aW9uKCk7CisgICAgSlNWYWx1ZSBhcmd1bWVudCA9IGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1
ZSgpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAvLyBpLiBMZXQgJ3JlamVj
dFJlc3VsdCcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBt
ZXRob2QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVJlYWN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b21pc2VSZWFjdGlvbi5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvbWlzZVJlYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksNyBAQAogI2lmIEVOQUJMRShQUk9NSVNFUykKIAogI2luY2x1ZGUgIkVycm9yLmgiCisj
aW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNp
bmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKQEAg
LTg4LDcgKzg5LDcgQEAgdm9pZCBFeGVjdXRlUHJvbWlzZVJlYWN0aW9uTWljcm90YXNrOjpydQog
ICAgIC8vICAgIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiBkZWZlcnJlZC5bW1JlamVjdF1d
IHBhc3NpbmcgdW5kZWZpbmVkIGFzIHRoaXNBcmd1bWVudAogICAgIC8vICAgIGFuZCBhIExpc3Qg
Y29udGFpbmluZyBoYW5kbGVyUmVzdWx0LltbdmFsdWVdXSBhcyBhcmd1bWVudHNMaXN0LgogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9
IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4
Y2VwdGlvbigpLT52YWx1ZSgpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAg
ICAgICAgIHBlcmZvcm1EZWZlcnJlZFJlamVjdChleGVjLCBkZWZlcnJlZCwgZXhjZXB0aW9uKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE4NTExMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiRGlz
YXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiRXJyb3JJbnN0YW5jZS5oIgorI2luY2x1ZGUgIkV4Y2Vw
dGlvbi5oIgogI2luY2x1ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKQEAgLTIzNSw2ICsyMzYs
NyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgd2Vha01h
cERhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWFrTWFwRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGluZmVycmVkVmFsdWVTdHJ1Y3R1cmUuc2V0KCp0aGlz
LCBJbmZlcnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAg
ICAgZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uUmFyZURhdGE6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBleGNlcHRpb25TdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAgICAgcHJvbWlzZURlZmVycmVkU3RydWN0
dXJlLnNldCgqdGhpcywgSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKICAgICBwcm9taXNlUmVhY3Rpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBK
U1Byb21pc2VSZWFjdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpA
QCAtNTQ1LDcgKzU0Nyw3IEBAIHZvaWQgVk06OnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCkKICAg
ICBoZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9CiAKLUpTVmFsdWUgVk06OnRocm93RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBlcnJvcikKK3ZvaWQgVk06OnRocm93RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAgICAgaWYgKE9w
dGlvbnM6OmJyZWFrT25UaHJvdygpKSB7CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUg
IiwgUmF3UG9pbnRlcihleGVjKSwgIiBmb3IgY29kZSBibG9jayAiLCAqZXhlYy0+Y29kZUJsb2Nr
KCksICJcbiIpOwpAQCAtNTUzLDM3ICs1NTUsMjQgQEAgSlNWYWx1ZSBWTTo6dGhyb3dFeGNlcHRp
b24oRXhlY1N0YXRlKiBleAogICAgIH0KICAgICAKICAgICBBU1NFUlQoZXhlYyA9PSB0b3BDYWxs
RnJhbWUgfHwgZXhlYyA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KSB8fCBleGVjID09IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsK
LSAgICAKLSAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICBpbnRlcnByZXRl
ci0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlKTsKLSAgICBtX2V4Y2VwdGlvblN0YWNrID0gUmVm
Q291bnRlZEFycmF5PFN0YWNrRnJhbWU+KHN0YWNrVHJhY2UpOwotICAgIG1fZXhjZXB0aW9uID0g
ZXJyb3I7Ci0KLSAgICByZXR1cm4gZXJyb3I7Ci19Ci0gICAgCi1KU09iamVjdCogVk06OnRocm93
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGVycm9yKQotewotICAgIHJldHVy
biBhc09iamVjdCh0aHJvd0V4Y2VwdGlvbihleGVjLCBKU1ZhbHVlKGVycm9yKSkpOwotfQotdm9p
ZCBWTTo6Z2V0RXhjZXB0aW9uSW5mbyhKU1ZhbHVlJiBleGNlcHRpb24sIFJlZkNvdW50ZWRBcnJh
eTxTdGFja0ZyYW1lPiYgZXhjZXB0aW9uU3RhY2spCi17Ci0gICAgZXhjZXB0aW9uID0gbV9leGNl
cHRpb247Ci0gICAgZXhjZXB0aW9uU3RhY2sgPSBtX2V4Y2VwdGlvblN0YWNrOwotfQotdm9pZCBW
TTo6c2V0RXhjZXB0aW9uSW5mbyhKU1ZhbHVlJiBleGNlcHRpb24sIFJlZkNvdW50ZWRBcnJheTxT
dGFja0ZyYW1lPiYgZXhjZXB0aW9uU3RhY2spCi17Ci0gICAgbV9leGNlcHRpb24gPSBleGNlcHRp
b247Ci0gICAgbV9leGNlcHRpb25TdGFjayA9IGV4Y2VwdGlvblN0YWNrOworICAgIHNldEV4Y2Vw
dGlvbihleGNlcHRpb24pOwogfQogCi12b2lkIFZNOjpjbGVhckV4Y2VwdGlvbigpCitKU1ZhbHVl
IFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhyb3duVmFsdWUp
CiB7Ci0gICAgbV9leGNlcHRpb24gPSBKU1ZhbHVlKCk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRp
b247CisgICAgaWYgKHRocm93blZhbHVlLmlzQ2VsbCgpICYmIHRocm93blZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUoKSA9PSBleGNlcHRpb25TdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgIGV4Y2Vw
dGlvbiA9IGpzQ2FzdDxFeGNlcHRpb24qPih0aHJvd25WYWx1ZS5hc0NlbGwoKSk7CisgICAgZWxz
ZQorICAgICAgICBleGNlcHRpb24gPSBFeGNlcHRpb246OmNyZWF0ZSgqdGhpcywgdGhyb3duVmFs
dWUpOworCisgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4g
SlNWYWx1ZShleGNlcHRpb24pOwogfQotdm9pZCBWTTo6IGNsZWFyRXhjZXB0aW9uU3RhY2soKQor
CitKU09iamVjdCogVk06OnRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IGVycm9yKQogewotICAgIG1fZXhjZXB0aW9uU3RhY2sgPSBSZWZDb3VudGVkQXJyYXk8U3RhY2tG
cmFtZT4oKTsKKyAgICByZXR1cm4gYXNPYmplY3QodGhyb3dFeGNlcHRpb24oZXhlYywgSlNWYWx1
ZShlcnJvcikpKTsKIH0KIAogdm9pZCBWTTo6c2V0U3RhY2tQb2ludGVyQXRWTUVudHJ5KHZvaWQq
IHNwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxODUxMTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OCw3ICs1OCw2IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgogI2luY2x1ZGUgPHd0
Zi9TdGFja0JvdW5kcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgpA
QCAtNzgsNiArNzcsNyBAQCBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBDb2RlQ2FjaGU7CiBjbGFz
cyBDb21tb25JZGVudGlmaWVyczsKIGNsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEV4Y2VwdGlvbjsK
IGNsYXNzIEhhbmRsZVN0YWNrOwogY2xhc3MgVHlwZVByb2ZpbGVyOwogY2xhc3MgVHlwZVByb2Zp
bGVyTG9nOwpAQCAtMjc0LDYgKzI3NCw3IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJl
PiB3ZWFrTWFwRGF0YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFZh
bHVlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uUmFyZURhdGFTdHJ1
Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gZXhjZXB0aW9uU3RydWN0dXJlOwogI2lmIEVO
QUJMRShQUk9NSVNFUykKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlRGVmZXJyZWRTdHJ1
Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZVJlYWN0aW9uU3RydWN0dXJlOwpA
QCAtMzcyLDE0ICszNzMsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFZNLCB0YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBjbGVhckV4Y2VwdGlvbigpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgY2xlYXJFeGNlcHRpb25TdGFjaygpOwotICAgIHZvaWQgZ2V0RXhjZXB0aW9uSW5mbyhKU1Zh
bHVlJiBleGNlcHRpb24sIFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPiYgZXhjZXB0aW9uU3Rh
Y2spOwotICAgIHZvaWQgc2V0RXhjZXB0aW9uSW5mbyhKU1ZhbHVlJiBleGNlcHRpb24sIFJlZkNv
dW50ZWRBcnJheTxTdGFja0ZyYW1lPiYgZXhjZXB0aW9uU3RhY2spOwotICAgIEpTVmFsdWUgZXhj
ZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9leGNlcHRpb247IH0KLSAgICBKU1ZhbHVlKiBhZGRy
ZXNzT2ZFeGNlcHRpb24oKSB7IHJldHVybiAmbV9leGNlcHRpb247IH0KLSAgICBjb25zdCBSZWZD
b3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKCkgY29uc3QgeyByZXR1cm4g
bV9leGNlcHRpb25TdGFjazsgfQorICAgIHZvaWQgY2xlYXJFeGNlcHRpb24oKSB7IG1fZXhjZXB0
aW9uID0gbnVsbHB0cjsgfQorICAgIHZvaWQgc2V0RXhjZXB0aW9uKEV4Y2VwdGlvbiogZXhjZXB0
aW9uKSB7IG1fZXhjZXB0aW9uID0gZXhjZXB0aW9uOyB9CiAKKyAgICBFeGNlcHRpb24qIGV4Y2Vw
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9CisgICAgSlNDZWxsKiogYWRkcmVz
c09mRXhjZXB0aW9uKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqKj4oJm1fZXhj
ZXB0aW9uKTsgfQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB0aHJvd0V4Y2VwdGlvbihF
eGVjU3RhdGUqLCBFeGNlcHRpb24qKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRo
cm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IEpTT2JqZWN0KiB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCopOwogCkBAIC01
NjksMTIgKzU2OSwxMSBAQCBwcml2YXRlOgogI2VuZGlmCiAjZW5kaWYKICAgICB2b2lkKiBtX2xh
c3RTdGFja1RvcDsKLSAgICBKU1ZhbHVlIG1fZXhjZXB0aW9uOworICAgIEV4Y2VwdGlvbiogbV9l
eGNlcHRpb24geyBudWxscHRyIH07CiAgICAgYm9vbCBtX2luRGVmaW5lT3duUHJvcGVydHk7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAgICAgTGVnYWN5UHJv
ZmlsZXIqIG1fZW5hYmxlZFByb2ZpbGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCdWlsdGluRXhl
Y3V0YWJsZXM+IG1fYnVpbHRpbkV4ZWN1dGFibGVzOwotICAgIFJlZkNvdW50ZWRBcnJheTxTdGFj
a0ZyYW1lPiBtX2V4Y2VwdGlvblN0YWNrOwogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8V2F0
Y2hwb2ludFNldD4+IG1faW1wdXJlUHJvcGVydHlXYXRjaHBvaW50U2V0czsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8VHlwZVByb2ZpbGVyPiBtX3R5cGVQcm9maWxlcjsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8VHlwZVByb2ZpbGVyTG9nPiBtX3R5cGVQcm9maWxlckxvZzsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksOSArNDksNiBAQCBWTUVudHJ5U2NvcGU6OlZNRW50cnlTY29wZShW
TSYgdm0sIEpTR2xvCiAgICAgICAgIC8vIG9ic2VydmUgdGltZSB4b25lIGNoYW5nZXMuCiAgICAg
ICAgIHZtLnJlc2V0RGF0ZUNhY2hlKCk7CiAgICAgfQotCi0gICAgLy8gQ2xlYXIgdGhlIGNhcHR1
cmVkIGV4Y2VwdGlvbiBzdGFjayBiZXR3ZWVuIGVudHJpZXMKLSAgICB2bS5jbGVhckV4Y2VwdGlv
blN0YWNrKCk7CiB9CiAKIHZvaWQgVk1FbnRyeVNjb3BlOjpzZXRFbnRyeVNjb3BlRGlkUG9wTGlz
dGVuZXIodm9pZCoga2V5LCBFbnRyeVNjb3BlRGlkUG9wTGlzdGVuZXIgbGlzdGVuZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0V4Y2VwdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvRXhj
ZXB0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9ydW50aW1lL0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNCBAQAorI2lm
bmRlZiBXZWJDb3JlX0ZXRF9FeGNlcHRpb25faAorI2RlZmluZSBXZWJDb3JlX0ZXRF9FeGNlcHRp
b25faAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0V4Y2VwdGlvbi5oPgorI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCShyZXZp
c2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEwICs3MywxMCBAQCBKU1ZhbHVlIEpTQ2FsbGJh
Y2tEYXRhOjppbnZva2VDYWxsYmFjayhKCiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUgY29va2llID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjppbnN0cnVtZW50RnVuY3Rpb25D
YWxsKGNvbnRleHQsIGNhbGxUeXBlLCBjYWxsRGF0YSk7CiAKLSAgICBKU1ZhbHVlIGV4Y2VwdGlv
bjsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNvbnRl
eHQtPmlzRG9jdW1lbnQoKQotICAgICAgICA/IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChl
eGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsICZleGNl
cHRpb24pCi0gICAgICAgIDogSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIHRoaXNWYWx1ZSwgYXJncywgJmV4Y2VwdGlvbik7CisgICAgICAgID8gSlNNYWluVGhy
ZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRo
aXNWYWx1ZSwgYXJncywgZXhjZXB0aW9uKQorICAgICAgICA6IEpTQzo6Y2FsbChleGVjLCBmdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIGV4Y2VwdGlvbik7CiAK
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihjb29raWUsIGNv
bnRleHQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRo
TlNSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkzLDggKzkzLDggQEAgU3RyaW5nIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjps
b29rdXBOYQogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBlbmQo
anNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcHJlZml4KSk7CiAKLSAgICBKU1ZhbHVlIGV4Y2VwdGlv
bjsKLSAgICBKU1ZhbHVlIHJldHZhbCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVj
LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX2N1c3RvbVJlc29sdmVyLmdldCgpLCBh
cmdzLCAmZXhjZXB0aW9uKTsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVl
IHJldHZhbCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBtX2N1c3RvbVJlc29sdmVyLmdldCgpLCBhcmdzLCBleGNlcHRpb24p
OwogCiAgICAgU3RyaW5nIHJlc3VsdDsKICAgICBpZiAoZXhjZXB0aW9uKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAxODUxMTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2Uu
aD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvckhh
bmRsaW5nU2NvcGUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbi5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlv
bi5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpAQCAtMTM4LDcgKzEzOSw3IEBAIEpTQzo6SlNWYWx1
ZSBqc0FycmF5KEpTQzo6RXhlY1N0YXRlKiBleGUKICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RB
cnJheShleGVjLCAwLCBnbG9iYWxPYmplY3QsIGxpc3QpOwogfQogCi12b2lkIHJlcG9ydEV4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNh
Y2hlZFNjcmlwdCkKK3ZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0
aW9uKiBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQogewogICAgIFJFTEVB
U0VfQVNTRVJUKGV4ZWMtPnZtKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAg
ICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGNlcHRpb24pKQpAQCAtMTQ4
LDcgKzE0OSw2IEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlMKIAog
ICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3Rh
Y2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgU2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxs
U3RhY2tTaXplVG9DYXB0dXJlKSk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICBl
eGVjLT5jbGVhclN1cHBsZW1lbnRhcnlFeGNlcHRpb25JbmZvKCk7CiAKICAgICBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IGpz
RHluYW1pY0Nhc3Q8SlNET01XaW5kb3cqPihnbG9iYWxPYmplY3QpKSB7CkBAIC0xNjYsMTQgKzE2
NiwxMyBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgfQog
CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoRXhjZXB0aW9uQmFzZSogZXhjZXB0
aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFzZShleGNlcHRpb24pKQorICAgIGlmIChFeGNlcHRpb25C
YXNlKiBleGNlcHRpb25CYXNlID0gdG9FeGNlcHRpb25CYXNlKGV4Y2VwdGlvbi0+dmFsdWUoKSkp
CiAgICAgICAgIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbkJhc2UtPm1lc3NhZ2UoKSArICI6ICIg
ICsgZXhjZXB0aW9uQmFzZS0+ZGVzY3JpcHRpb24oKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8g
RklYTUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3RvcjogV2ViQ29y
ZTo6cmVwb3J0RXhjZXB0aW9uIHNob3VsZCBub3QgZXZhbHVhdGUgSmF2YVNjcmlwdCBoYW5kbGlu
ZyBleGNlcHRpb25zCiAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjdXN0b24gZXhjZXB0aW9uIG9i
amVjdCwgY2FsbCB0b1N0cmluZyBvbiBpdCB0byB0cnkgYW5kIGdldCBhIG5pY2Ugc3RyaW5nIHJl
cHJlc2VudGF0aW9uIGZvciB0aGUgZXhjZXB0aW9uLgotICAgICAgICBlcnJvck1lc3NhZ2UgPSBl
eGNlcHRpb24udG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgICAgICBlcnJvck1lc3Nh
Z2UgPSBleGNlcHRpb24tPnZhbHVlKCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICBleGVjLT5jbGVhclN1cHBsZW1l
bnRhcnlFeGNlcHRpb25JbmZvKCk7CiAgICAgfQogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOwpAQCAtMTgyLDcgKzE4MSw3IEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlMKIAogdm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAg
IEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lv
biAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHZvaWQgYWRkSW1wdXJlUHJvcGVydHko
Y29uc3QgQXRvbWljU3RyaW4KIAogY29uc3QgSlNDOjpIYXNoVGFibGUmIGdldEhhc2hUYWJsZUZv
ckdsb2JhbERhdGEoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SGFzaFRhYmxlJiBzdGF0aWNUYWJsZSk7
CiAKLVdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIpOworV0VCQ09S
RV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2Vw
dGlvbiosIENhY2hlZFNjcmlwdCogPSBudWxscHRyKTsKIHZvaWQgcmVwb3J0Q3VycmVudEV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogCiBKU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9u
KEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0aW9uQ29kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk4LDEwICs5OCwxMCBAQCB2b2lkIEpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudChT
Y3JpcHRFCiAgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAgICAgVk1F
bnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIHZtLmVudHJ5U2NvcGUgPyB2bS5lbnRyeVNjb3BlLT5n
bG9iYWxPYmplY3QoKSA6IGdsb2JhbE9iamVjdCk7CiAKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRp
b247CisgICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uOwogICAgICAgICBKU1ZhbHVlIHJldHVy
blZhbHVlID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpCi0gICAgICAgICAg
ICA/IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJncywgJmV4Y2VwdGlvbikKLSAgICAgICAgICAg
IDogSlNDOjpjYWxsKGV4ZWMsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBhcmdzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgICAgID8gSlNNYWluVGhyZWFkRXhl
Y1N0YXRlOjpjYWxsKGV4ZWMsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBhcmdzLCBleGNlcHRpb24pCisgICAgICAgICAgICA6IEpTQzo6Y2FsbChleGVjLCBq
c0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJncywgZXhjZXB0
aW9uKTsKIAogICAgICAgICBnbG9iYWxPYmplY3QtPnNldEN1cnJlbnRFdmVudChzYXZlZEV2ZW50
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVu
ZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTAgKzEyNCwxMCBAQCB2
b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAgICAgICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6Omlu
c3RydW1lbnRGdW5jdGlvbkNhbGwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY2FsbFR5cGUsIGNh
bGxEYXRhKTsKIAogICAgICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGhhbmRsZUV2ZW50RnVuY3Rp
b24gPT0ganNGdW5jdGlvbiA/IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBldmVudC0+Y3VycmVu
dFRhcmdldCgpKSA6IGpzRnVuY3Rpb247Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAg
ICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICAgICAgSlNWYWx1ZSByZXR2YWwgPSBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkKLSAgICAgICAgICAgID8gSlNNYWluVGhy
ZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCAmZXhjZXB0aW9uKQotICAgICAgICAgICAgOiBKU0M6
OmNhbGwoZXhlYywgaGFuZGxlRXZlbnRGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlz
VmFsdWUsIGFyZ3MsICZleGNlcHRpb24pOworICAgICAgICAgICAgPyBKU01haW5UaHJlYWRFeGVj
U3RhdGU6OmNhbGwoZXhlYywgaGFuZGxlRXZlbnRGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCB0aGlzVmFsdWUsIGFyZ3MsIGV4Y2VwdGlvbikKKyAgICAgICAgICAgIDogSlNDOjpjYWxsKGV4
ZWMsIGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBh
cmdzLCBleGNlcHRpb24pOwogCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
Q2FsbEZ1bmN0aW9uKGNvb2tpZSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRl
LmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTggKzQ2LDE4IEBA
IHZvaWQgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpkaWRMZWF2ZVNjcmkKICAgICBNdXRhdGlvbk9i
c2VydmVyOjpkZWxpdmVyQWxsTXV0YXRpb25zKCk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBmdW5jdGlv
bkNhbGxIYW5kbGVyRnJvbUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1Zh
bHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNh
bGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdM
aXN0JiBhcmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbikKK0pTQzo6SlNWYWx1ZSBmdW5jdGlv
bkNhbGxIYW5kbGVyRnJvbUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1Zh
bHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNh
bGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdM
aXN0JiBhcmdzLCBKU0M6OkV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKQogewogICAgIGlm
IChpc01haW5UaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6
Y2FsbChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUs
IGFyZ3MsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuIEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbk9i
amVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIGV4Y2VwdGlvbik7Cisg
ICAgICAgIHJldHVybiBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb25P
YmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCByZXR1cm5lZEV4Y2Vw
dGlvbik7CisgICAgcmV0dXJuIEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5
cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIHJldHVybmVkRXhjZXB0aW9uKTsKIH0KIAot
SlNDOjpKU1ZhbHVlIGV2YWx1YXRlSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1Zh
bHVlLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbikKK0pTQzo6SlNWYWx1ZSBldmFsdWF0ZUhhbmRs
ZXJGcm9tQW55VGhyZWFkKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZUNv
ZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpFeGNlcHRpb24qJiByZXR1
cm5lZEV4Y2VwdGlvbikKIHsKICAgICBpZiAoaXNNYWluVGhyZWFkKCkpCi0gICAgICAgIHJldHVy
biBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZSwgdGhpc1ZhbHVl
LCBleGNlcHRpb24pOwotICAgIHJldHVybiBKU0M6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZSwgdGhp
c1ZhbHVlLCBleGNlcHRpb24pOworICAgICAgICByZXR1cm4gSlNNYWluVGhyZWFkRXhlY1N0YXRl
OjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwor
ICAgIHJldHVybiBKU0M6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZSwgdGhpc1ZhbHVlLCByZXR1cm5l
ZEV4Y2VwdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCShyZXZp
c2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRF
eGVjU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTYgKzUwLDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHNfbWFpblRocmVhZFN0YXRlOwogICAgIH07CiAgICAgCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjYWxsKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZnVu
Y3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEm
IGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFy
Z3MsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY2Fs
bChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6
OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpK
U1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkV4Y2VwdGlv
biomIHJldHVybmVkRXhjZXB0aW9uKQogICAgIHsKICAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0
YXRlIGN1cnJlbnRTdGF0ZShleGVjKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6Y2FsbChleGVjLCBm
dW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIGV4Y2Vw
dGlvbik7CisgICAgICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAg
ICAgfTsKIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZXZhbHVhdGUoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1Zh
bHVlLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbikKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGV2
YWx1YXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJj
ZSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2Vw
dGlvbikKICAgICB7CiAgICAgICAgIEpTTWFpblRocmVhZEV4ZWNTdGF0ZSBjdXJyZW50U3RhdGUo
ZXhlYyk7Ci0gICAgICAgIHJldHVybiBKU0M6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZSwgdGhpc1Zh
bHVlLCBleGNlcHRpb24pOworICAgICAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBzb3Vy
Y2UsIHRoaXNWYWx1ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIH07CiAKICAgICBzdGF0aWMg
dm9pZCBydW5UYXNrKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6Ok1pY3JvdGFzayYgdGFzaykK
QEAgLTEyMSw4ICsxMjEsOCBAQCBwcml2YXRlOgogICAgIEpTQzo6RXhlY1N0YXRlKiBtX3ByZXZp
b3VzU3RhdGU7CiB9OwogCi1KU0M6OkpTVmFsdWUgZnVuY3Rpb25DYWxsSGFuZGxlckZyb21BbnlU
aHJlYWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6
Q2FsbFR5cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBj
b25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKTsKLUpTQzo6
SlNWYWx1ZSBldmFsdWF0ZUhhbmRsZXJGcm9tQW55VGhyZWFkKEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgSlNDOjpTb3VyY2VDb2RlJiwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpKU1ZhbHVl
KiBleGNlcHRpb24pOworSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uQ2FsbEhhbmRsZXJGcm9tQW55VGhy
ZWFkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNh
bGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9u
KTsKK0pTQzo6SlNWYWx1ZSBldmFsdWF0ZUhhbmRsZXJGcm9tQW55VGhyZWFkKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgSlND
OjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9u
Q2FsbGJhY2suY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU011dGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw4ICs4Nyw4
IEBAIHZvaWQgSlNNdXRhdGlvbkNhbGxiYWNrOjpjYWxsKGNvbnN0IFZlY3QKIAogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6
Omluc3RydW1lbnRGdW5jdGlvbkNhbGwoY29udGV4dCwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKIAot
ICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChl
eGVjLCBjYWxsYmFjaywgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc09ic2VydmVyLCBhcmdzLCAmZXhj
ZXB0aW9uKTsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKKyAgICBKU01haW5UaHJlYWRFeGVj
U3RhdGU6OmNhbGwoZXhlYywgY2FsbGJhY2ssIGNhbGxUeXBlLCBjYWxsRGF0YSwganNPYnNlcnZl
ciwgYXJncywgZXhjZXB0aW9uKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
Q2FsbEZ1bmN0aW9uKGNvb2tpZSwgY29udGV4dCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1JlYWRhYmxlSlNTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlSlNTdHJlYW0uY3BwCShyZXZpc2lvbiAxODUxMTApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZUpTU3RyZWFtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgZ2V0UHJvcGVy
dHlGcm9tT2JqCiAgICAgcmV0dXJuIG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgaWRlbnRpZmllcikpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUgY2Fs
bEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBqc0Z1bmN0aW9uLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzLCBKU1ZhbHVlKiBleGNlcHRpb24pCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUgY2FsbEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBqc0Z1bmN0aW9uLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRz
LCBFeGNlcHRpb24qJiBleGNlcHRpb24pCiB7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShqc0Z1bmN0aW9uLCBjYWxsRGF0YSk7CkBA
IC0xMDAsMTEgKzEwMCwxMSBAQCB2b2lkIFJlYWRhYmxlSlNTdHJlYW06OlNvdXJjZTo6c3RhcnQo
RXhlCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5h
cHBlbmQocmVhZGFibGVTdHJlYW0uanNDb250cm9sbGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpKSk7
CiAKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICBjYWxsRnVuY3Rpb24oJmV4ZWMsIHN0YXJ0
RnVuY3Rpb24sIG1fc291cmNlLmdldCgpLCBhcmd1bWVudHMsICZleGNlcHRpb24pOworICAgIEV4
Y2VwdGlvbiogZXhjZXB0aW9uOworICAgIGNhbGxGdW5jdGlvbigmZXhlYywgc3RhcnRGdW5jdGlv
biwgbV9zb3VyY2UuZ2V0KCksIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNl
cHRpb24pIHsKLSAgICAgICAgdGhyb3dWTUVycm9yKCZleGVjLCBleGNlcHRpb24pOworICAgICAg
ICBleGVjLnZtKCkudGhyb3dFeGNlcHRpb24oJmV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxl
ZEFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2No
ZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMTEgKzk5
LDExIEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlRnVuY3Rpb25JbkMKIAogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBKU01haW5UaHJlYWRFeGVjU3Rh
dGU6Omluc3RydW1lbnRGdW5jdGlvbkNhbGwoJmNvbnRleHQsIGNhbGxUeXBlLCBjYWxsRGF0YSk7
CiAKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAg
ICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKQotICAgICAgICBKU01haW5UaHJlYWRFeGVjU3Rh
dGU6OmNhbGwoZXhlYywgbV9mdW5jdGlvbi5nZXQoKSwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlz
VmFsdWUsIGFyZ3MsICZleGNlcHRpb24pOworICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGU6
OmNhbGwoZXhlYywgbV9mdW5jdGlvbi5nZXQoKSwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFs
dWUsIGFyZ3MsIGV4Y2VwdGlvbik7CiAgICAgZWxzZQotICAgICAgICBKU0M6OmNhbGwoZXhlYywg
bV9mdW5jdGlvbi5nZXQoKSwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsICZl
eGNlcHRpb24pOworICAgICAgICBKU0M6OmNhbGwoZXhlYywgbV9mdW5jdGlvbi5nZXQoKSwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIGV4Y2VwdGlvbik7CiAKICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihjb29raWUsICZjb250ZXh0KTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsOSArMTYwLDggQEAgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcgogCiAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bEV2YWx1YXRlU2NyaXB0KG1fZnJhbWUsIHNvdXJjZVVSTCwgc291cmNlQ29kZS5zdGFydExpbmUo
KSk7CiAKLSAgICBKU1ZhbHVlIGV2YWx1YXRpb25FeGNlcHRpb247Ci0KLSAgICBKU1ZhbHVlIHJl
dHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBqc1NvdXJj
ZUNvZGUsIHNoZWxsLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uKiBldmFs
dWF0aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRF
eGVjU3RhdGU6OmV2YWx1YXRlKGV4ZWMsIGpzU291cmNlQ29kZSwgc2hlbGwsIGV2YWx1YXRpb25F
eGNlcHRpb24pOwogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRFdmFsdWF0ZVNj
cmlwdChjb29raWUsIG1fZnJhbWUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDE1ICs5OCwxNSBAQCB2b2lkIFdvcmtlclNjcmlwdENv
bnRyb2xsZXI6OmV2YWx1YXRlKGNvCiAgICAgaWYgKGlzRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGV4Y2VwdGlvbjsK
LSAgICBldmFsdWF0ZShzb3VyY2VDb2RlLCAmZXhjZXB0aW9uKTsKLSAgICBpZiAoZXhjZXB0aW9u
LmpzVmFsdWUoKSkgeworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uOworICAgIGV2YWx1YXRlKHNv
dXJjZUNvZGUsIGV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayh2bSgpKTsKLSAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fd29ya2VyR2xv
YmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCksIGV4Y2VwdGlvbi5qc1ZhbHVlKCkpOworICAg
ICAgICByZXBvcnRFeGNlcHRpb24obV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbEV4
ZWMoKSwgZXhjZXB0aW9uKTsKICAgICB9CiB9CiAKLXZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSwgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUqIGV4Y2VwdGlvbikKK3ZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSwgSlNDOjpFeGNlcHRp
b24qJiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBpZiAoaXNFeGVjdXRpb25Gb3JiaWRkZW4o
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE2LDggKzExNiw4IEBAIHZvaWQgV29ya2VyU2NyaXB0
Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX3dvcmtlckds
b2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsRXhlYygpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogCi0gICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgIEpTQzo6ZXZhbHVh
dGUoZXhlYywgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV93b3JrZXJHbG9iYWxTY29wZVdy
YXBwZXItPmdsb2JhbFRoaXMoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEpTQzo6RXhj
ZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgIEpTQzo6ZXZhbHVhdGUoZXhlYywgc291
cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2Jh
bFRoaXMoKSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGlmICgoZXZhbHVhdGlvbkV4Y2VwdGlvbiAmJiBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25F
eGNlcHRpb24oZXZhbHVhdGlvbkV4Y2VwdGlvbikpIApAQCAtMTMxLDE2ICsxMzEsMTkgQEAgdm9p
ZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjbwogICAgICAgICBpbnQgbGluZU51
bWJlciA9IDA7CiAgICAgICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOwogICAgICAgICBTdHJpbmcg
c291cmNlVVJMID0gc291cmNlQ29kZS51cmwoKS5zdHJpbmcoKTsKLSAgICAgICAgaWYgKG1fd29y
a2VyR2xvYmFsU2NvcGUtPnNhbml0aXplU2NyaXB0RXJyb3IoZXJyb3JNZXNzYWdlLCBsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXIsIHNvdXJjZVVSTCwgc291cmNlQ29kZS5jYWNoZWRTY3JpcHQoKSkp
Ci0gICAgICAgICAgICAqZXhjZXB0aW9uID0gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoKm1fdm0s
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgZXJyb3JN
ZXNzYWdlLmltcGwoKSkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCptX3ZtLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAg
ICAgICAgaWYgKG1fd29ya2VyR2xvYmFsU2NvcGUtPnNhbml0aXplU2NyaXB0RXJyb3IoZXJyb3JN
ZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHNvdXJjZVVSTCwgc291cmNlQ29kZS5j
YWNoZWRTY3JpcHQoKSkpIHsKKyAgICAgICAgICAgIHZtLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZS5pbXBsKCkpKTsKKyAgICAgICAgICAgIHJldHVy
bmVkRXhjZXB0aW9uID0gdm0uZXhjZXB0aW9uKCk7CisgICAgICAgICAgICB2bS5jbGVhckV4Y2Vw
dGlvbigpOworICAgICAgICB9CiAgICAgfQorICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXZhbHVh
dGlvbkV4Y2VwdGlvbjsKIH0KIAotdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzZXRFeGNl
cHRpb24oY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGV4Y2VwdGlvbikKK3ZvaWQgV29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6c2V0RXhjZXB0aW9uKEpTQzo6RXhjZXB0aW9uKiBleGNlcHRp
b24pCiB7Ci0gICAgbV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbEV4ZWMoKS0+dm0o
KS50aHJvd0V4Y2VwdGlvbihtX3dvcmtlckdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsRXhlYygp
LCBleGNlcHRpb24uanNWYWx1ZSgpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fd29y
a2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCk7CisgICAgZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogfQogCiB2b2lkIFdvcmtlclNjcmlwdENvbnRy
b2xsZXI6OnNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24oKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNp
b24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw5ICs2MCw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291
cmNlQ29kZSYpOwotICAgICAgICB2b2lkIGV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUm
LCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSogZXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBldmFs
dWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiwgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4
Y2VwdGlvbik7CiAKLSAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmKTsKKyAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oSlNDOjpFeGNlcHRpb24q
KTsKIAogICAgICAgICAvLyBBc3luYyByZXF1ZXN0IHRvIHRlcm1pbmF0ZSBhIEpTIHJ1biBleGVj
dXRpb24uIEV2ZW50dWFsbHkgY2F1c2VzIHRlcm1pbmF0aW9uCiAgICAgICAgIC8vIGV4Y2VwdGlv
biByYWlzZWQgZHVyaW5nIEpTIGV4ZWN1dGlvbiwgaWYgdGhlIHdvcmtlciB0aHJlYWQgaGFwcGVu
cyB0byBydW4gSlMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3Jp
cHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6
cnVuRXZlbnRMbwogICAgIH0gd2hpbGUgKHJlc3VsdCAhPSBNZXNzYWdlUXVldWVUZXJtaW5hdGVk
ICYmICFtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMpOwogfQogCi12b2lkIFdvcmtlclNj
cmlwdERlYnVnU2VydmVyOjpyZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6SlNWYWx1ZSBleGNlcHRpb24pIGNvbnN0Cit2b2lkIFdvcmtlclNjcmlwdERlYnVnU2VydmVy
OjpyZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBl
eGNlcHRpb24pIGNvbnN0CiB7CiAgICAgV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4
Y2VwdGlvbik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3Jp
cHREZWJ1Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGlu
dWUoSlNDOjpKU0dsb2JhbE9iamVjdCopIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBy
dW5FdmVudExvb3BXaGlsZVBhdXNlZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc0Nv
bnRlbnRTY3JpcHQoSlNDOjpFeGVjU3RhdGUqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiopIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgV29ya2VyR2xvYmFsU2NvcGUqIG1fd29ya2VyR2xvYmFsU2NvcGU7CiAgICAgTGlzdGVu
ZXJTZXQgbV9saXN0ZW5lcnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dl
YlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTEy
MSw3ICsxMjEsNyBAQCBpZCBjcmVhdGVKU1dyYXBwZXIoSlNDOjpKU09iamVjdCogb2JqZWN0CiAg
ICAgcmV0dXJuIFtbW1dlYlNjcmlwdE9iamVjdCBhbGxvY10gX2luaXRXaXRoSlNPYmplY3Q6b2Jq
ZWN0IG9yaWdpblJvb3RPYmplY3Q6b3JpZ2luIHJvb3RPYmplY3Q6cm9vdF0gYXV0b3JlbGVhc2Vd
OwogfQogCi1zdGF0aWMgdm9pZCBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoRXhlY1N0YXRlKiBleGVj
LCBKU0M6OkpTVmFsdWUmIGV4Y2VwdGlvbikKK3N0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29u
c29sZShFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAgICAg
SlNET01XaW5kb3cqIHdpbmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+dm1FbnRyeUdsb2JhbE9i
amVjdCgpKTsKICAgICBpZiAoIXdpbmRvdyB8fCAhZXhjZXB0aW9uKQpAQCAtMTMxLDcgKzEzMSw3
IEBAIHN0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShFeGVjU3QKIAogc3RhdGljIHZv
aWQgYWRkRXhjZXB0aW9uVG9Db25zb2xlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0M6OkpT
VmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgSlNDOjpFeGNlcHRpb24q
IGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CkBAIC0z
NDIsOCArMzQyLDggQEAgLSAoaWQpY2FsbFdlYlNjcmlwdE1ldGhvZDooTlNTdHJpbmcgKiluYQog
ICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAg
ICBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uOwotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBKU01h
aW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgW3NlbGYgX2ltcF0sIGFyZ0xpc3QsICZleGNlcHRpb24pOworICAgIEpTQzo6RXhjZXB0aW9u
KiBleGNlcHRpb247CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IEpTTWFpblRocmVhZEV4ZWNT
dGF0ZTo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBbc2VsZiBfaW1w
XSwgYXJnTGlzdCwgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAg
YWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMsIGV4Y2VwdGlvbik7CkBAIC0zNjYsNyArMzY2LDgg
QEAgLSAoaWQpZXZhbHVhdGVXZWJTY3JpcHQ6KE5TU3RyaW5nICopc2NyaQogCiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCi0gICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0g
SlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKFN0cmluZyhz
Y3JpcHQpKSwgSlNDOjpKU1ZhbHVlKCksIDApOworICAgIEpTQzo6RXhjZXB0aW9uKiB1bnVzZWQ7
CisgICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpl
dmFsdWF0ZShleGVjLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQpKSwgSlNDOjpKU1ZhbHVlKCks
IHVudXNlZCk7CiAKICAgICBpZCByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0
VmFsdWVUb09iamNWYWx1ZTpyZXR1cm5WYWx1ZSBvcmlnaW5Sb290T2JqZWN0OltzZWxmIF9vcmln
aW5Sb290T2JqZWN0XSByb290T2JqZWN0OltzZWxmIF9yb290T2JqZWN0XV07CiAgICAgCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVy
LmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VT
Y3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBi
b29sIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6aXNDb250ZW50U2NyCiAgICAgcmV0dXJuICZjdXJy
ZW50V29ybGQoZXhlYykgIT0gJm1haW5UaHJlYWROb3JtYWxXb3JsZCgpOwogfQogCi12b2lkIFBh
Z2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBleGNlcHRpb24pIGNvbnN0Cit2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVwb3J0
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uKiBleGNlcHRpb24pIGNvbnN0CiB7
CiAgICAgV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5o
CShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlw
dERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoSlNDOjpKU0dsb2JhbE9iamVjdCopIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBydW5FdmVudExvb3BXaGlsZVBhdXNlZCgpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRTY3JpcHQoSlNDOjpFeGVjU3RhdGUqKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIHZvaWQgcnVuRXZlbnRMb29wV2hpbGVQYXVzZWRJbnRlcm5hbCgpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29w
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw5ICsxOTcsOSBAQCB2b2lkIFdvcmtlckdsb2Jh
bFNjb3BlOjppbXBvcnRTY3JpcHRzKGNvCiAKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpzY3JpcHRJbXBvcnRlZChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHNjcmlwdExvYWRl
ci0+aWRlbnRpZmllcigpLCBzY3JpcHRMb2FkZXItPnNjcmlwdCgpKTsKIAotICAgICAgICBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSBleGNlcHRpb247Ci0gICAgICAgIG1fc2NyaXB0LT5ldmFsdWF0
ZShTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdExvYWRlci0+c2NyaXB0KCksIHNjcmlwdExvYWRlci0+
cmVzcG9uc2VVUkwoKSksICZleGNlcHRpb24pOwotICAgICAgICBpZiAoIWV4Y2VwdGlvbi5oYXNO
b1ZhbHVlKCkpIHsKKyAgICAgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbjsKKyAgICAgICAg
bV9zY3JpcHQtPmV2YWx1YXRlKFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0TG9hZGVyLT5zY3JpcHQo
KSwgc2NyaXB0TG9hZGVyLT5yZXNwb25zZVVSTCgpKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYg
KGV4Y2VwdGlvbikgewogICAgICAgICAgICAgbV9zY3JpcHQtPnNldEV4Y2VwdGlvbihleGNlcHRp
b24pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYg
KzUwLDcgQEAKICNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5j
bHVkZSAiV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlcy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0FQSUNhc3QuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9FeGNlcHRpb24uaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0
aW9uQ2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+
CkBAIC01MjIsNyArNTIzLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9u
KEpTQwogICAgIGlmICghdG9KU0RPTVdpbmRvdyhleGVjU3RhdGUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbihl
eGVjU3RhdGUsIHRvSlMoZXhlY1N0YXRlLCBleGNlcHRpb24pKTsKKyAgICBXZWJDb3JlOjpyZXBv
cnRFeGNlcHRpb24oZXhlY1N0YXRlLCBFeGNlcHRpb246OmNhc3QodG9KUyhleGVjU3RhdGUsIGV4
Y2VwdGlvbikpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkQ3JlYXRlUGFnZShXZWJQ
YWdlKiBwYWdlKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNp
b24gMTg1MTEwKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcgQEAKICNpbXBvcnQgPENvcmVGb3VuZGF0aW9uL0NG
U2V0Lmg+CiAjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMQ29ubmVjdGlvbi5oPgogI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvRXhjZXB0
aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9B
bmltYXRpb25Db250cm9sbGVyLmg+CkBAIC03MjQsNyArNzI1LDggQEAgKyAodm9pZClfcmVwb3J0
RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4YwogICAgIGlmICghdG9KU0RPTVdpbmRvdyhleGVjU3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlcG9y
dEV4Y2VwdGlvbihleGVjU3RhdGUsIHRvSlMoZXhlY1N0YXRlLCBleGNlcHRpb24pKTsKKyAgICBF
eGNlcHRpb24qIHZtRXhjZXB0aW9uID0gRXhjZXB0aW9uOjpjYXN0KHRvSlMoZXhlY1N0YXRlLCBl
eGNlcHRpb24pKTsKKyAgICByZXBvcnRFeGNlcHRpb24oZXhlY1N0YXRlLCB2bUV4Y2VwdGlvbik7
CiB9CiAKIHN0YXRpYyB2b2lkIFdlYktpdEluaXRpYWxpemVBcHBsaWNhdGlvbkNhY2hlUGF0aElm
TmVjZXNzYXJ5KCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254160</attachid>
            <date>2015-06-03 00:13:59 -0700</date>
            <delta_ts>2015-06-03 01:51:50 -0700</delta_ts>
            <desc>patch 2 for EWS testing.  Still need to write tests.</desc>
            <filename>wip-exception3.patch</filename>
            <type>text/plain</type>
            <size>136406</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4NTExMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDU0LDYgKzQ1NCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAg
ICBydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5jcHAKICAgICBydW50aW1lL0Vycm9ySW5zdGFu
Y2UuY3BwCiAgICAgcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKKyAgICBydW50aW1lL0V4Y2Vw
dGlvbi5jcHAKICAgICBydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCiAgICAgcnVudGltZS9FeGNl
cHRpb25IZWxwZXJzLmNwcAogICAgIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNvbXBs
ZXRpb24uaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJEaXNh
c3NlbWJsZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFeGNlcHRpb25I
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJJbml0aWFs
aXplVGhyZWFkaW5nLmgiCkBAIC04OTksMTMgKzkwMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoCiAgICAg
ICAgIGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksICJhcmd1bWVudHMiKSwgYXJyYXkpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRpb247
CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKICAg
ICBzdG9wV2F0Y2guc3RhcnQoKTsKLSAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSwganNjU291cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXhj
ZXB0aW9uKTsKKyAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291
cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCBleGNlcHRpb24pOwogICAg
IHN0b3BXYXRjaC5zdG9wKCk7CiAKLSAgICBpZiAoISFleGNlcHRpb24pIHsKKyAgICBpZiAoZXhj
ZXB0aW9uKSB7CiAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpAQCAtOTIyLDggKzkyMyw4IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2EKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgCi0gICAgSlNWYWx1
ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFt
ZSksIEpTVmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEV4Y2VwdGlvbiogZXZh
bHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBK
U1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIGlmIChldmFsdWF0aW9uRXhjZXB0
aW9uKQogICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV2YWx1YXRpb25F
eGNlcHRpb24pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTEyODUs
MTUgKzEyODYsMTUgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0Kgog
CiAgICAgICAgIHZtLnN0YXJ0U2FtcGxpbmcoKTsKIAotICAgICAgICBKU1ZhbHVlIGV2YWx1YXRp
b25FeGNlcHRpb247Ci0gICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdCwgZmlsZU5hbWUpLCBKU1Zh
bHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgRXhjZXB0aW9uKiBldmFsdWF0
aW9uRXhjZXB0aW9uOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZpbGVOYW1lKSwgSlNW
YWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3Mg
JiYgIWV2YWx1YXRpb25FeGNlcHRpb247CiAgICAgICAgIGlmIChkdW1wICYmICFldmFsdWF0aW9u
RXhjZXB0aW9uKQogICAgICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50
b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNl
cHRpb24pIHsKLSAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlv
bkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHBy
aW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0
cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIElkZW50aWZpZXIgc3RhY2tJ
RCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksICJz
dGFjayIpOwotICAgICAgICAgICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXZhbHVhdGlvbkV4Y2Vw
dGlvbi5nZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOworICAgICAgICAg
ICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS5nZXQo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOwogICAgICAgICAgICAgaWYgKCFz
dGFja1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIl
c1xuIiwgc3RhY2tWYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZh
bHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
fQpAQCAtMTM0OSw4ICsxMzUwLDggQEAgc3RhdGljIHZvaWQgcnVuSW50ZXJhY3RpdmUoR2xvYmFs
T2JqZWN0KgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBl
dmFsdWF0aW9uRXhjZXB0aW9uOwotICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVh
dGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc291cmNlLCBpbnRlcnBy
ZXRlck5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgRXhj
ZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVl
ID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc291cmNl
LCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogI2Vs
c2UKICAgICAgICAgcHJpbnRmKCIlcyIsIGludGVyYWN0aXZlUHJvbXB0KTsKICAgICAgICAgVmVj
dG9yPGNoYXIsIDI1Nj4gbGluZTsKQEAgLTEzNjksNyArMTM3MCw3IEBAIHN0YXRpYyB2b2lkIHJ1
bkludGVyYWN0aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9
IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2UobGluZS5kYXRh
KCksIGludGVycHJldGVyTmFtZSksIEpTVmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOwog
I2VuZGlmCiAgICAgICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQotICAgICAgICAgICAgcHJp
bnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3RyaW5nKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkp
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBl
dmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCByZXR1cm5WYWx1ZS50
b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNCYXNlLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvbXBsZXRp
b24uaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJh
Y2suaCIKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3QuaCIKQEAgLTYzLDEyICs2NCwxMiBAQCBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3Jp
cHQoSlNDb250ZXh0UmVmCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PnZtRW50cnlHbG9iYWxPYmplY3QoKTsKICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3Vy
Y2Uoc2NyaXB0LT5zdHJpbmcoKSwgc291cmNlVVJMID8gc291cmNlVVJMLT5zdHJpbmcoKSA6IFN0
cmluZygpLCBUZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHN0YXJ0
aW5nTGluZU51bWJlciksIE9yZGluYWxOdW1iZXI6OmZpcnN0KCkpKTsKIAotICAgIEpTVmFsdWUg
ZXZhbHVhdGlvbkV4Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHNvdXJjZSwganNUaGlzT2JqZWN0LCAmZXZhbHVh
dGlvbkV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOworICAg
IEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSwgc291cmNlLCBqc1RoaXNPYmplY3QsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogCiAgICAgaWYg
KGV2YWx1YXRpb25FeGNlcHRpb24pIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAg
ICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAg
ICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1
ZSgpKTsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKICAgICAgICAgLy8gRklYTUU6IElm
IHdlIGhhdmUgYSBkZWJ1Z2dlciBhdHRhY2hlZCB3ZSBjb3VsZCBsZWFybiBhYm91dCBQYXJzZUVy
cm9yIGV4Y2VwdGlvbnMgdGhyb3VnaAogICAgICAgICAvLyBTY3JpcHREZWJ1Z1NlcnZlcjo6c291
cmNlUGFyc2VkIGFuZCB0aGlzIHBhdGggY291bGQgcHJvZHVjZSBhIGR1cGxpY2F0ZSB3YXJuaW5n
LiBUaGUKQEAgLTEwNyw3ICsxMDgsOCBAQCBib29sIEpTQ2hlY2tTY3JpcHRTeW50YXgoSlNDb250
ZXh0UmVmIGN0CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoZXhlYywgc3ludGF4RXhjZXB0aW9uKTsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CisgICAg
ICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gRXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwg
c3ludGF4RXhjZXB0aW9uKTsKKyAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7
CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUg
IkRhdGVDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKQEAg
LTYxLDYgKzYyLDIxIEBACiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKK3N0YXRpYyBib29sIGhh
bmRsZUV4Y2VwdGlvbklmTmVlZGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVJlZiogcmV0dXJu
ZWRFeGNlcHRpb25SZWYpCit7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAg
ICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIGlm
IChyZXR1cm5lZEV4Y2VwdGlvblJlZikKKyAgICAgICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvblJl
ZiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7CisgICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgICAgIGV4ZWMt
PnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4
Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOworI2VuZGlmCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIEpTQ2xhc3NSZWYgSlNDbGFzc0NyZWF0ZShj
b25zdCBKU0NsYXNzRGVmaW5pdGlvbiogZGVmaW5pdGlvbikKIHsKICAgICBpbml0aWFsaXplVGhy
ZWFkaW5nKCk7CkBAIC0xNDgsMTYgKzE2NCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUZ1
bmN0aW9uKEpTQ29udGUKICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhleGVjLCBib2R5LT5zdHJp
bmcoKSkpOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgYXJncywgbmFtZUlELCBzb3VyY2VVUkwgPyBz
b3VyY2VVUkwtPnN0cmluZygpIDogU3RyaW5nKCksIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVy
Ojpmcm9tT25lQmFzZWRJbnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcjo6Zmly
c3QoKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVl
IGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRp
b24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUp
OwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2Vu
ZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAg
ICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQog
CkBAIC0xODAsMTYgKzE4OCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUFycmF5KEpTQ29u
dGV4dFIKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShl
eGVjLCAwKTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1Zh
bHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNl
cHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFs
dWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwot
I2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikp
CiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQogCiAgICAgcmV0dXJuIHRvUmVmKHJlc3VsdCk7
CiB9CkBAIC0yMDgsMTYgKzIwOCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZURhdGUoSlND
b250ZXh0UmUKICAgICAgICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBhcmd1bWVudHNbaV0p
KTsKIAogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3REYXRlKGV4ZWMsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgYXJnTGlzdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24o
KTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1Jl
ZihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVj
LCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVk
ZWQoZXhlYywgZXhjZXB0aW9uKSkKICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICB9CiAKICAgICBy
ZXR1cm4gdG9SZWYocmVzdWx0KTsKIH0KQEAgLTIzNSwxNiArMjI3LDggQEAgSlNPYmplY3RSZWYg
SlNPYmplY3RNYWtlRXJyb3IoSlNDb250ZXh0UgogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1
cmUgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCk7CiAgICAg
SlNPYmplY3QqIHJlc3VsdCA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVj
dHVyZSwgbWVzc2FnZSk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAg
ICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBp
ZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2Vw
dGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZh
bHVlKTsKLSNlbmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNl
cHRpb24pKQogICAgICAgICByZXN1bHQgPSAwOwotICAgIH0KIAogICAgIHJldHVybiB0b1JlZihy
ZXN1bHQpOwogfQpAQCAtMjYzLDE2ICsyNDcsOCBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VS
ZWdFeHAoSlNDb250ZXh0CiAgICAgICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgYXJndW1l
bnRzW2ldKSk7CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0UmVnRXhwKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgIGFyZ0xpc3QpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+
ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0
aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52
bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNl
cHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2Vw
dGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAg
fQogICAgIAogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQpAQCAtMzM5LDE1ICszMTUsNyBA
QCBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJvcGVydHkoSlNDb250ZXh0CiAgICAgSlNPYmplY3Qq
IGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNPYmpl
Y3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25W
YWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAg
ICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAg
ICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCku
cmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0K
KyAgICBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVy
biB0b1JlZihleGVjLCBqc1ZhbHVlKTsKIH0KIApAQCAtMzcyLDE1ICszNDAsNyBAQCB2b2lkIEpT
T2JqZWN0U2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGN0CiAgICAgICAgIGpzT2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5wdXQoanNPYmplY3QsIGV4ZWMsIG5hbWUsIGpzVmFsdWUsIHNsb3QpOwogICAg
IH0KIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4
Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24p
Ci0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwot
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRy
b2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlm
Ci0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiB9
CiAKIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXh0UmVmIGN0
eCwgSlNPYmplY3RSZWYgb2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCkBAIC0zOTUsMTUgKzM1NSw3IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQ
cm9wZXJ0eUF0SW5kZXgoSlMKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7
CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc09iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5SW5k
ZXgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4
Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24p
Ci0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwot
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRy
b2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlm
Ci0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiAg
ICAgcmV0dXJuIHRvUmVmKGV4ZWMsIGpzVmFsdWUpOwogfQogCkBAIC00MjEsMTUgKzM3Myw3IEBA
IHZvaWQgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXgKICAgICBKU1ZhbHVlIGpz
VmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKICAgICAKICAgICBqc09iamVjdC0+bWV0aG9kVGFi
bGUoKS0+cHV0QnlJbmRleChqc09iamVjdCwgZXhlYywgcHJvcGVydHlJbmRleCwganNWYWx1ZSwg
ZmFsc2UpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVl
IGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRp
b24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUp
OwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2Vu
ZGlmCi0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7
CiB9CiAKIGJvb2wgSlNPYmplY3REZWxldGVQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09i
amVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQpAQCAtNDQ0LDE1ICszODgsNyBAQCBib29sIEpTT2JqZWN0RGVsZXRlUHJvcGVydHko
SlNDb250ZXh0UmVmCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCiAg
ICAgYm9vbCByZXN1bHQgPSBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHko
anNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAg
ICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQot
ICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAg
fQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApAQCAtNjE2LDE2ICs1NTIsOCBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0
Q2FsbEFzRnVuY3Rpb24oSlNDb250CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgSlNWYWx1ZVJl
ZiByZXN1bHQgPSB0b1JlZihleGVjLCBjYWxsKGV4ZWMsIGpzT2JqZWN0LCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGpzVGhpc09iamVjdCwgYXJnTGlzdCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9u
KCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9S
ZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xv
YmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhl
YywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVl
ZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTY1NywxNiArNTg1LDggQEAgSlNPYmplY3RSZWYgSlNPYmpl
Y3RDYWxsQXNDb25zdHJ1Y3RvcihKUwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1l
bnRDb3VudDsgaSsrKQogICAgICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGFyZ3VtZW50
c1tpXSkpOwogICAgIEpTT2JqZWN0UmVmIHJlc3VsdCA9IHRvUmVmKGNvbnN0cnVjdChleGVjLCBq
c09iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJnTGlzdCkpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAg
ICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBv
cnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhh
bmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9
IDA7Ci0gICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHRSZWYuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24u
aCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0Jhc2VQcml2YXRlLmgiCiAj
aW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJKU1NjcmlwdFJlZlByaXZhdGUuaCIKQEAgLTE0Miwx
MiArMTQzLDEyIEBAIEpTVmFsdWVSZWYgSlNTY3JpcHRFdmFsdWF0ZShKU0NvbnRleHRSZWYKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQotICAgIEpTVmFsdWUgaW50ZXJuYWxFeGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBpbnRl
cm5hbEV4Y2VwdGlvbjsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHRoaXNWYWx1ZVJlZiA/IHRv
SlMoZXhlYywgdGhpc1ZhbHVlUmVmKSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBldmFsdWF0ZShleGVjLCBTb3VyY2VDb2RlKHNjcmlwdCksIHRoaXNWYWx1ZSwgJmludGVy
bmFsRXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGV4ZWMsIFNvdXJj
ZUNvZGUoc2NyaXB0KSwgdGhpc1ZhbHVlLCBpbnRlcm5hbEV4Y2VwdGlvbik7CiAgICAgaWYgKGlu
dGVybmFsRXhjZXB0aW9uKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAq
ZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgaW50ZXJuYWxFeGNlcHRpb24pOworICAgICAgICAgICAg
KmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGludGVybmFsRXhjZXB0aW9uLT52YWx1ZSgpKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIEFTU0VSVChyZXN1bHQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW1wb3J0ICJBUElDYXN0LmgiCiAjaW1wb3J0ICJEYXRlSW5zdGFuY2UuaCIKICNpbXBv
cnQgIkVycm9yLmgiCisjaW1wb3J0ICJFeGNlcHRpb24uaCIKICNpbXBvcnQgIkphdmFTY3JpcHRD
b3JlLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWaXJ0dWFs
TWFjaGluZUludGVybmFsLmgiCkBAIC02NDUsOSArNjQ2LDEwIEBAIEpTQ29udGFpbmVyQ29udmVy
dG9yOjpUYXNrIEpTQ29udGFpbmVyQ28KIH0KIAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9S
KQotc3RhdGljIHZvaWQgcmVwb3J0RXhjZXB0aW9uVG9JbnNwZWN0b3IoSlNHbG9iYWxDb250ZXh0
UmVmIGNvbnRleHQsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24pCitzdGF0aWMgdm9pZCByZXBvcnRF
eGNlcHRpb25Ub0luc3BlY3RvcihKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNDOjpKU1Zh
bHVlIGV4Y2VwdGlvblZhbHVlKQogewogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhj
b250ZXh0KTsKKyAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246
OmNyZWF0ZShleGVjLT52bSgpLCBleGNlcHRpb25WYWx1ZSk7CiAgICAgZXhlYy0+dm1FbnRyeUds
b2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4
ZWMsIGV4Y2VwdGlvbik7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWYWx1ZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1ZhbHVlUmVmLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZS5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCkBAIC01Miw2ICs1Mywy
MSBAQAogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCitzdGF0aWMgYm9vbCBoYW5kbGVFeGNlcHRp
b25JZk5lZWRlZChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVSZWYqIHJldHVybmVkRXhjZXB0aW9u
UmVmKQoreworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBFeGNlcHRp
b24qIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBpZiAocmV0dXJuZWRF
eGNlcHRpb25SZWYpCisgICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb25SZWYgPSB0b1JlZihl
eGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorICAgICAgICBleGVjLT52bUVudHJ5R2xv
YmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhl
YywgZXhjZXB0aW9uKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCiAjaWYgUExBVEZPUk0oTUFDKQogc3RhdGljIGJvb2wgZXZlcm5v
dGVIYWNrTmVlZGVkKCkKIHsKQEAgLTIyNCwxNSArMjQwLDggQEAgYm9vbCBKU1ZhbHVlSXNFcXVh
bChKU0NvbnRleHRSZWYgY3R4LCBKUwogICAgIEpTVmFsdWUganNCID0gdG9KUyhleGVjLCBiKTsK
IAogICAgIGJvb2wgcmVzdWx0ID0gSlNWYWx1ZTo6ZXF1YWwoZXhlYywganNBLCBqc0IpOyAvLyBm
YWxzZSBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24o
KTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1Jl
ZihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVj
LCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKLSAgICB9CisgICAgaGFuZGxlRXhjZXB0aW9uSWZO
ZWVkZWQoZXhlYywgZXhjZXB0aW9uKTsKKyAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBA
IC0yNjYsMTUgKzI3NSw3IEBAIGJvb2wgSlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0cnVjdG9yKEpT
Q28KICAgICBpZiAoIWpzQ29uc3RydWN0b3ItPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmltcGxl
bWVudHNIYXNJbnN0YW5jZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCByZXN1
bHQgPSBqc0NvbnN0cnVjdG9yLT5oYXNJbnN0YW5jZShleGVjLCBqc1ZhbHVlKTsgLy8gZmFsc2Ug
aWYgYW4gZXhjZXB0aW9uIGlzIHRocm93bgotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
ewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0g
ICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhl
YywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lm
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2Jq
ZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhj
ZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVk
KGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzY4LDE2ICsz
NjksOCBAQCBKU1N0cmluZ1JlZiBKU1ZhbHVlQ3JlYXRlSlNPTlN0cmluZyhKU0NvCiAgICAgU3Ry
aW5nIHJlc3VsdCA9IEpTT05TdHJpbmdpZnkoZXhlYywgdmFsdWUsIGluZGVudCk7CiAgICAgaWYg
KGV4Y2VwdGlvbikKICAgICAgICAgKmV4Y2VwdGlvbiA9IDA7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNl
cHRpb24oKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24g
PSB0b1JlZihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50
cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlv
bihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9u
SWZOZWVkZWQoZXhlYywgZXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogICAg
IHJldHVybiBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKHJlc3VsdCkubGVha1JlZigpOwogfQogCkBA
IC00MDYsMTYgKzM5OSw4IEBAIGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0
eCwKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKIAogICAgIGRvdWJs
ZSBudW1iZXIgPSBqc1ZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0
aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0g
dG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5
R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24o
ZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklm
TmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIG51bWJlciA9IFBOYU47Ci0gICAgfQog
ICAgIHJldHVybiBudW1iZXI7CiB9CiAKQEAgLTQzMSwxNiArNDE2LDggQEAgSlNTdHJpbmdSZWYg
SlNWYWx1ZVRvU3RyaW5nQ29weShKU0NvbnRleAogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMo
ZXhlYywgdmFsdWUpOwogICAgIAogICAgIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gc3RyaW5nUmVm
KE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUoanNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9u
KQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsK
LSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRp
ZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAg
ICAgICBzdHJpbmdSZWYuY2xlYXIoKTsKLSAgICB9CiAgICAgcmV0dXJuIHN0cmluZ1JlZi5yZWxl
YXNlKCkubGVha1JlZigpOwogfQogCkBAIC00NTYsMTYgKzQzMyw4IEBAIEpTT2JqZWN0UmVmIEpT
VmFsdWVUb09iamVjdChKU0NvbnRleHRSZWYKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4
ZWMsIHZhbHVlKTsKICAgICAKICAgICBKU09iamVjdFJlZiBvYmplY3RSZWYgPSB0b1JlZihqc1Zh
bHVlLnRvT2JqZWN0KGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAg
ICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAg
ICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4
Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFC
TEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
blZhbHVlKTsKLSNlbmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBl
eGNlcHRpb24pKQogICAgICAgICBvYmplY3RSZWYgPSAwOwotICAgIH0KICAgICByZXR1cm4gb2Jq
ZWN0UmVmOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJ
KHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcxMiw2
ICs3MTIsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJvckhhbmRs
aW5nU2NvcGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJv
ckluc3RhbmNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJy
b3JQcm90b3R5cGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxF
eGNlcHRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNl
cHRpb25GdXp6LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhj
ZXB0aW9uSGVscGVycy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEV4ZWN1dGFibGUuY3BwIiAvPgpAQCAtMTUwMyw2ICsxNTA0LDcgQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JIYW5kbGluZ1Njb3BlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEVycm9ySW5zdGFuY2UuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JQcm90b3R5cGUuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlvbkZ1enouaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uSGVscGVycy5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxFeGVjdXRhYmxlLmgiIC8+CkBAIC0xODI3LDQgKzE4MjksNCBA
QAogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICAgIDxJbXBvcnQg
UHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxCdWlsZEN1c3RvbWl6YXRpb25zXG1hc20udGFyZ2V0
cyIgLz4KICAgPC9JbXBvcnRHcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCis8L1Byb2plY3Q+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZp
bHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTE2OTgsNiArMTY5OCw5IEBACiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFsdWVTdHJlbmd0aC5jcHAiPgogICAgICAgPEZpbHRlcj5k
Zmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcRXhjZXB0aW9uLmNwcCI+CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4K
KyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhj
ZXB0aW9uRnV6ei5jcHAiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9D
bENvbXBpbGU+CkBAIC00MTkwLDYgKzQxOTMsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1ZhbHVlU3RyZW5ndGguaCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNl
cHRpb24uaCI+CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVk
ZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uRnV6ei5oIj4K
ICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtNDQ4
NSw0ICs0NDkxLDQgQEAKICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9NQVNNPgog
ICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8
L1Byb2plY3Q+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE2NjAsNiArMTY2MCw4IEBACiAJCUU0
OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNDkxMkVGMjYx
QTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRBMDYxQUI4REQwQTAwMkY1NEJG
IC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlv
blRpbWVMaW1pdFRlc3QuY3BwICovOyB9OwogCQlGRTBENEEwOTFBQkEyNDM3MDAyRjU0QkYgLyog
R2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ0QTA3MUFCQTI0MzcwMDJGNTRCRiAvKiBHbG9i
YWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuY3BwICovOyB9OworCQlGRTFDMEZGRDFCMTkzRTk4
MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUxQzBGRkYx
QjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0
aW9uLmNwcCAqLzsgfTsKIAkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3Au
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENF
OUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovOyB9OwogCQlGRTIwQ0U5RTE1
RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
RTM4NEVFNTFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NEVFMTFBRERCN0FEMDA1NURFMkMg
LyogSlNEb2xsYXJWTS5jcHAgKi87IH07CkBAIC0zNDYzLDYgKzM0NjUsOCBAQAogCQlGRTBENEEw
NTFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBFeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHBhdGggPSBB
UEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRTBENEEwNzFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5h
bGl6ZXJUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEdsb2Jh
bENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvR2xvYmFsQ29u
dGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkUwRDRBMDgxQUJBMjQzNzAwMkY1NEJGIC8qIEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHbG9iYWxDb250ZXh0V2l0aEZp
bmFsaXplclRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9HbG9iYWxDb250ZXh0V2l0aEZpbmFsaXpl
clRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxQzBGRkMxQjE5M0U5ODAw
QjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
eGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxQzBGRkUxQjE5NEZE
MTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFeGNlcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIw
Q0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xv
b3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBE
RjM0MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBM
TEludENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFMzg0RUUxMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9sbGFyVk0uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQyNyw2ICs0NDMxLDggQEAKIAkJCQlCQzAyRTk4
QjBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUx
ODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4
MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCisJCQkJRkUxQzBGRkMxQjE5M0U5
ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAorCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZD
QSAvKiBFeGNlcHRpb24uY3BwICovLAogCQkJCTBGMTJERTBEMTk3OUQ1RkQwMDA2RkY0RSAvKiBF
eGNlcHRpb25GdXp6LmNwcCAqLywKIAkJCQkwRjEyREUwRTE5NzlENUZEMDAwNkZGNEUgLyogRXhj
ZXB0aW9uRnV6ei5oICovLAogCQkJCTE0MjlEODc3MEVEMjFBQ0QwMEI4OTYxOSAvKiBFeGNlcHRp
b25IZWxwZXJzLmNwcCAqLywKQEAgLTU2MjQsNiArNTYzMCw3IEBACiAJCQkJRkU0RDU1QjgxQUU3
MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1
MDY4NjUxQUUyNDYzOTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzQ0MkNCMjUxQTZDREI4QzAwNUQzRDdDIC8qIEpTSW5wdXRzLmpzb24gaW4gSGVh
ZGVycyAqLywKKwkJCQlGRTFDMEZGRDFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQ
cm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8q
IEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcxMEUxOUY2REY4
MTAwOThGNUVDIC8qIEluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIGluIEhl
YWRlcnMgKi8sCkBAIC03NDA4LDYgKzc0MTUsNyBAQAogCQkJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1
NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENE
MjE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDMTg0RTFFMTdCRUUyMkUwMDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJRkUxQzBGRkYxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDlGQjg2QjFBRTMzNUM2MDAzOUQwNjkgLyogV2Vh
a1NldFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENERTE4NzEyNThEMDA5
NTVDMjQgLyogSlNQcm9taXNlUmVhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUz
RDExNjEzNkRBOTAwOUYxN0QwIC8qIEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25D
YWxsLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMywxMSArMTMz
LDExIEBAIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2EKICAgICAgICAg
cmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsK
LSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICBp
ZiAobV9jYWxsSGFuZGxlcikKLSAgICAgICAgcmVzdWx0ID0gbV9jYWxsSGFuZGxlcihtX2V4ZWMs
IGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIG1fYXJndW1lbnRzLCAm
ZXhjZXB0aW9uKTsKKyAgICAgICAgcmVzdWx0ID0gbV9jYWxsSGFuZGxlcihtX2V4ZWMsIGZ1bmN0
aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIG1fYXJndW1lbnRzLCBleGNlcHRp
b24pOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gSlNDOjpjYWxsKG1fZXhlYywgZnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc09iamVjdCwgbV9hcmd1bWVudHMsICZleGNlcHRp
b24pOworICAgICAgICByZXN1bHQgPSBKU0M6OmNhbGwobV9leGVjLCBmdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCB0aGlzT2JqZWN0LCBtX2FyZ3VtZW50cywgZXhjZXB0aW9uKTsKIAogICAg
IGlmIChleGNlcHRpb24pIHsKICAgICAgICAgaGFkRXhjZXB0aW9uID0gdHJ1ZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxs
LmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9T
Y3JpcHRGdW5jdGlvbkNhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwcml2
YXRlOgogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBTY3JpcHRGdW5jdGlvbkNhbGwgOiBwdWJs
aWMgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6
OkpTVmFsdWUgKCpTY3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBj
b25zdCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbik7CisgICAgdHlw
ZWRlZiBKU0M6OkpTVmFsdWUgKCpTY3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNh
bGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkV4Y2VwdGlvbiomIGV4Y2VwdGlv
bik7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBTY3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyIGhhbmRsZXIg
PSBudWxscHRyKTsKICAgICBTY3JpcHRWYWx1ZSBjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbik7CiAg
ICAgU2NyaXB0VmFsdWUgY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1c2hfd2l0
aF9zY29wZSIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcG9w
X3Njb3BlIiwgImxlbmd0aCIgOiAyIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXNo
X25hbWVfc2NvcGUiLCAibGVuZ3RoIiA6IDUgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9w
X2NhdGNoIiwgImxlbmd0aCIgOiAyIH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYXRj
aCIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdGhyb3ciLCAi
bGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Rocm93X3N0YXRpY19l
cnJvciIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVidWci
LCAibGVuZ3RoIiA6IDMgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzAz
LDcgKzMwMyw2IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2RlQmwKICAg
ICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CiAgICAgY2FzZSBvcF9zdHJjYXQ6CiAgICAgY2FzZSBv
cF90b19wcmltaXRpdmU6Ci0gICAgY2FzZSBvcF9jYXRjaDoKICAgICBjYXNlIG9wX2NyZWF0ZV90
aGlzOgogICAgIGNhc2Ugb3BfbmV3X2FycmF5OgogICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZl
cjoKQEAgLTM3NCw2ICszNzMsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQo
Q29kZUJsCiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQs
IGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAg
Y2FzZSBvcF9jYXRjaDoKICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OiB7
CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVj
dGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0ODQsNyArMTQ4NCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNv
ZGUoCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9jYXRjaDogewogICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRS
ZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYXRjaCIsIHIwKTsKKyAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2F0Y2giKTsKKyAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUocjEpLmRhdGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIG9wX3Rocm93OiB7CkBAIC0yODc4LDcgKzI4ODAsNyBAQCBib29sIENvZGVCbG9jazo6
aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoCiB9CiAjZW5kaWYKIAotSGFuZGxlckluZm8qIENvZGVC
bG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQor
SGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCBib29sIHJlcXVpcmVDYXRjaEhhbmRsZXIpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogCkBAIC0y
ODg4LDYgKzI4OTAsOSBAQCBIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNv
CiAgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiYgZXhjZXB0aW9uSGFuZGxlcnMgPSBtX3JhcmVEYXRh
LT5tX2V4Y2VwdGlvbkhhbmRsZXJzOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhjZXB0
aW9uSGFuZGxlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIg
PSBleGNlcHRpb25IYW5kbGVyc1tpXTsKKyAgICAgICAgaWYgKHJlcXVpcmVDYXRjaEhhbmRsZXIg
JiYgIWhhbmRsZXIuaXNDYXRjaEhhbmRsZXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAg
ICAgICAgIC8vIEhhbmRsZXJzIGFyZSBvcmRlcmVkIGlubmVybW9zdCBmaXJzdCwgc28gdGhlIGZp
cnN0IGhhbmRsZXIgd2UgZW5jb3VudGVyCiAgICAgICAgIC8vIHRoYXQgY29udGFpbnMgdGhlIHNv
dXJjZSBhZGRyZXNzIGlzIHRoZSBjb3JyZWN0IGhhbmRsZXIgdG8gdXNlLgogICAgICAgICBpZiAo
aGFuZGxlci5zdGFydCA8PSBieXRlY29kZU9mZnNldCAmJiBoYW5kbGVyLmVuZCA+IGJ5dGVjb2Rl
T2Zmc2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNyArMTg1LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gaW5kZXggPj0gbV9udW1WYXJzOwogICAgIH0KIAotICAgIEhhbmRsZXJJbmZv
KiBoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAg
IEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQsIGJvb2wgcmVxdWlyZUNhdGNoSGFuZGxlciA9IGZhbHNlKTsKICAgICB1bnNpZ25lZCBs
aW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogICAg
IHVuc2lnbmVkIGNvbHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0KTsKICAgICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90LApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBAIGVudW0gY2xhc3MgSGFuZGxlclR5cGUgewogc3RydWN0IEhhbmRsZXJJ
bmZvQmFzZSB7CiAgICAgSGFuZGxlclR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEhhbmRsZXJUeXBlPih0eXBlQml0cyk7IH0KICAgICB2b2lkIHNldFR5cGUoSGFuZGxlclR5
cGUgdHlwZSkgeyB0eXBlQml0cyA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKTsgfQotICAg
IAorCiAgICAgY29uc3QgY2hhciogdHlwZU5hbWUoKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0
eXBlKCkpIHsKQEAgLTU1LDkgKzU1LDkgQEAgc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIAorCiAgICAgYm9vbCBp
c0NhdGNoSGFuZGxlcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBIYW5kbGVyVHlwZTo6Q2F0
Y2g7IH0KLSAgICAKKwogICAgIHVpbnQzMl90IHN0YXJ0OwogICAgIHVpbnQzMl90IGVuZDsKICAg
ICB1aW50MzJfdCB0YXJnZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MjgsNyArMjUyOCw3IEBAIFRyeURhdGEqIEJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoVHJ5KExhYmUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kRW1pdENhdGNoKFRyeURhdGEqIHRy
eURhdGEsIFJlZ2lzdGVySUQqIHRhcmdldFJlZ2lzdGVyLCBMYWJlbCogZW5kLCBIYW5kbGVyVHlw
ZSBoYW5kbGVyVHlwZSkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFRyeUFuZEVtaXRDYXRj
aChUcnlEYXRhKiB0cnlEYXRhLCBSZWdpc3RlcklEKiBleGNlcHRpb25SZWdpc3RlciwgUmVnaXN0
ZXJJRCogdGhyb3duVmFsdWVSZWdpc3RlciwgTGFiZWwqIGVuZCwgSGFuZGxlclR5cGUgaGFuZGxl
clR5cGUpCiB7CiAgICAgbV91c2VzRXhjZXB0aW9ucyA9IHRydWU7CiAgICAgCkBAIC0yNTQ2LDgg
KzI1NDYsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kCiAgICAg
dHJ5UmFuZ2UudHJ5RGF0YS0+aGFuZGxlclR5cGUgPSBoYW5kbGVyVHlwZTsKIAogICAgIGVtaXRP
cGNvZGUob3BfY2F0Y2gpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXRSZWdpc3Rl
ci0+aW5kZXgoKSk7Ci0gICAgcmV0dXJuIHRhcmdldFJlZ2lzdGVyOworICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChleGNlcHRpb25SZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHRocm93blZhbHVlUmVnaXN0ZXItPmluZGV4KCkpOwogfQogCiB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCkBAIC0yNzYwLDcgKzI3NjAsMTEgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVu
dW1lcmF0aW9uKAogICAgICAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVlbmNlIGZvciB0aHJvdy1l
ZCBjb250cm9sIGZsb3cuCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gY2F0
Y2hIZXJlID0gZW1pdExhYmVsKG5ld0xhYmVsKCkuZ2V0KCkpOwotICAgICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gcG9wVHJ5QW5kRW1pdENhdGNoKHRyeURh
dGEsIG5ld1RlbXBvcmFyeSgpLCBjYXRjaEhlcmUuZ2V0KCksIEhhbmRsZXJUeXBlOjpTeW50aGVz
aXplZEZpbmFsbHkpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJl
Z2lzdGVyID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
dGhyb3duVmFsdWVSZWdpc3RlciA9IG5ld1RlbXBvcmFyeSgpOworICAgICAgICAgICAgcG9wVHJ5
QW5kRW1pdENhdGNoKHRyeURhdGEsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLAorICAgICAgICAg
ICAgICAgIHRocm93blZhbHVlUmVnaXN0ZXIuZ2V0KCksIGNhdGNoSGVyZS5nZXQoKSwgSGFuZGxl
clR5cGU6OlN5bnRoZXNpemVkRmluYWxseSk7CisKICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4g
Y2F0Y2hEb25lID0gbmV3TGFiZWwoKTsKIAogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJldHVybk1ldGhvZCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQo
KSwgcHJvcGVydHlOYW1lcygpLnJldHVybktleXdvcmQpOwpAQCAtMjc3OCw3ICsyNzgyLDggQEAg
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAogICAgICAgICAgICAgZW1p
dFRocm93KGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKIAogICAgICAgICAgICAgLy8gQWJzb3Ji
IGV4Y2VwdGlvbi4KLSAgICAgICAgICAgIHBvcFRyeUFuZEVtaXRDYXRjaChyZXR1cm5DYWxsVHJ5
RGF0YSwgbmV3VGVtcG9yYXJ5KCksIGNhdGNoRG9uZS5nZXQoKSwgSGFuZGxlclR5cGU6OlN5bnRo
ZXNpemVkRmluYWxseSk7CisgICAgICAgICAgICBwb3BUcnlBbmRFbWl0Q2F0Y2gocmV0dXJuQ2Fs
bFRyeURhdGEsIG5ld1RlbXBvcmFyeSgpLAorICAgICAgICAgICAgICAgIG5ld1RlbXBvcmFyeSgp
LCBjYXRjaERvbmUuZ2V0KCksIEhhbmRsZXJUeXBlOjpTeW50aGVzaXplZEZpbmFsbHkpOwogICAg
ICAgICAgICAgZW1pdFRocm93KGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKICAgICAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU1Myw3ICs1NTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gU3RhcnQgYSB0cnkg
YmxvY2suICdzdGFydCcgbXVzdCBoYXZlIGJlZW4gZW1pdHRlZC4KICAgICAgICAgVHJ5RGF0YSog
cHVzaFRyeShMYWJlbCogc3RhcnQpOwogICAgICAgICAvLyBFbmQgYSB0cnkgYmxvY2suICdlbmQn
IG11c3QgaGF2ZSBiZWVuIGVtaXR0ZWQuCi0gICAgICAgIFJlZ2lzdGVySUQqIHBvcFRyeUFuZEVt
aXRDYXRjaChUcnlEYXRhKiwgUmVnaXN0ZXJJRCogdGFyZ2V0UmVnaXN0ZXIsIExhYmVsKiBlbmQs
IEhhbmRsZXJUeXBlKTsKKyAgICAgICAgdm9pZCBwb3BUcnlBbmRFbWl0Q2F0Y2goVHJ5RGF0YSos
IFJlZ2lzdGVySUQqIGV4Y2VwdGlvblJlZ2lzdGVyLCBSZWdpc3RlcklEKiB0aHJvd25WYWx1ZVJl
Z2lzdGVyLCBMYWJlbCogZW5kLCBIYW5kbGVyVHlwZSk7CiAKICAgICAgICAgdm9pZCBlbWl0VGhy
b3coUmVnaXN0ZXJJRCogZXhjKQogICAgICAgICB7IApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODgxLDcgKzI4ODEsOSBAQCB2b2lkIFRyeU5vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyCiAKICAgICAgICAgLy8gVW5jYXVnaHQgZXhjZXB0aW9u
IHBhdGg6IHRoZSBjYXRjaCBibG9jay4KICAgICAgICAgUmVmUHRyPExhYmVsPiBoZXJlID0gZ2Vu
ZXJhdG9yLmVtaXRMYWJlbChnZW5lcmF0b3IubmV3TGFiZWwoKS5nZXQoKSk7Ci0gICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBleGNlcHRpb25SZWdpc3RlciA9IGdlbmVyYXRvci5wb3BUcnlBbmRF
bWl0Q2F0Y2godHJ5RGF0YSwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBoZXJlLmdldCgpLCBI
YW5kbGVyVHlwZTo6Q2F0Y2gpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9u
UmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiB0aHJvd25WYWx1ZVJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwor
ICAgICAgICBnZW5lcmF0b3IucG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIGV4Y2VwdGlvblJl
Z2lzdGVyLmdldCgpLCB0aHJvd25WYWx1ZVJlZ2lzdGVyLmdldCgpLCBoZXJlLmdldCgpLCBIYW5k
bGVyVHlwZTo6Q2F0Y2gpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fZmluYWxseUJsb2NrKSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2F0Y2ggYmxvY2sgdGhyb3dzIGFuIGV4Y2VwdGlvbiBh
bmQgd2UgaGF2ZSBhIGZpbmFsbHkgYmxvY2ssIHRoZW4gdGhlIGZpbmFsbHkKQEAgLTI4ODksNyAr
Mjg5MSw3IEBAIHZvaWQgVHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKICAgICAg
ICAgICAgIHRyeURhdGEgPSBnZW5lcmF0b3IucHVzaFRyeShoZXJlLmdldCgpKTsKICAgICAgICAg
fQogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHVzaENhdGNoU2NvcGUoZ2VuZXJhdG9yLnNjb3Bl
UmVnaXN0ZXIoKSwgbV9leGNlcHRpb25JZGVudCwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksIERv
bnREZWxldGUpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFB1c2hDYXRjaFNjb3BlKGdlbmVyYXRv
ci5zY29wZVJlZ2lzdGVyKCksIG1fdGhyb3duVmFsdWVJZGVudCwgdGhyb3duVmFsdWVSZWdpc3Rl
ci5nZXQoKSwgRG9udERlbGV0ZSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRy
b2xGbG93KG1fdHJ5QmxvY2stPmVuZE9mZnNldCgpICsgMSk7CiAgICAgICAgIGdlbmVyYXRvci5l
bWl0Tm9kZShkc3QsIG1fY2F0Y2hCbG9jayk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UG9wU2Nv
cGUoZ2VuZXJhdG9yLnNjb3BlUmVnaXN0ZXIoKSk7CkBAIC0yOTEyLDEwICsyOTE0LDEyIEBAIHZv
aWQgVHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRKdW1wKGZpbmFsbHlFbmRMYWJlbC5nZXQoKSk7CiAKICAgICAgICAgLy8gVW5jYXVnaHQg
ZXhjZXB0aW9uIHBhdGg6IGludm9rZSB0aGUgZmluYWxseSBibG9jaywgdGhlbiByZS10aHJvdyB0
aGUgZXhjZXB0aW9uLgotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcEV4Y2VwdGlvblJl
Z2lzdGVyID0gZ2VuZXJhdG9yLnBvcFRyeUFuZEVtaXRDYXRjaCh0cnlEYXRhLCBnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIHByZUZpbmFsbHlMYWJlbC5nZXQoKSwgSGFuZGxlclR5cGU6OkZpbmFs
bHkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVnaXN0ZXIgPSBnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aHJvd25W
YWx1ZVJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBnZW5lcmF0
b3IucG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLCB0
aHJvd25WYWx1ZVJlZ2lzdGVyLmdldCgpLCBwcmVGaW5hbGx5TGFiZWwuZ2V0KCksIEhhbmRsZXJU
eXBlOjpGaW5hbGx5KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3co
ZmluYWxseVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9m
aW5hbGx5QmxvY2spOwotICAgICAgICBnZW5lcmF0b3IuZW1pdFRocm93KHRlbXBFeGNlcHRpb25S
ZWdpc3Rlci5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VGhyb3coZXhjZXB0aW9uUmVn
aXN0ZXIuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZmluYWxseUVuZExh
YmVsLmdldCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cobV9m
aW5hbGx5QmxvY2stPmVuZE9mZnNldCgpICsgMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
Nyw3ICs0ODcsNyBAQCBib29sIERlYnVnZ2VyOjpoYXNCcmVha3BvaW50KFNvdXJjZUlEIHNvCiAg
ICAgLy8gc28gbWFrZSBpdCBsb29rcyBsaWtlIHRoZSBkZWJ1Z2dlciBpcyBhbHJlYWR5IHBhdXNl
ZC4KICAgICBUZW1wb3JhcnlQYXVzZWRTdGF0ZSBwYXVzZWRTdGF0ZSgqdGhpcyk7CiAKLSAgICBK
U1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICBEZWJ1Z2dl
ckNhbGxGcmFtZSogZGVidWdnZXJDYWxsRnJhbWUgPSBjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGRlYnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0ZShicmVh
a3BvaW50LT5jb25kaXRpb24sIGV4Y2VwdGlvbik7CiAKQEAgLTY5NSwxMyArNjk1LDEzIEBAIHZv
aWQgRGVidWdnZXI6OnBhdXNlSWZOZWVkZWQoQ2FsbEZyYW1lKiAKICAgICB9CiB9CiAKLXZvaWQg
RGVidWdnZXI6OmV4Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNlcHRp
b24sIGJvb2wgaGFzSGFuZGxlcikKK3ZvaWQgRGVidWdnZXI6OmV4Y2VwdGlvbihDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNlcHRpb24sIGJvb2wgaGFzQ2F0Y2hIYW5kbGVyKQogewog
ICAgIGlmIChtX2lzUGF1c2VkKQogICAgICAgICByZXR1cm47CiAKICAgICBQYXVzZVJlYXNvbkRl
Y2xhcmF0aW9uIHJlYXNvbigqdGhpcywgUGF1c2VkRm9yRXhjZXB0aW9uKTsKLSAgICBpZiAobV9w
YXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8IChtX3BhdXNl
T25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAmJiAhaGFzSGFu
ZGxlcikpIHsKKyAgICBpZiAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25BbGxF
eGNlcHRpb25zIHx8IChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0
RXhjZXB0aW9ucyAmJiAhaGFzQ2F0Y2hIYW5kbGVyKSkgewogICAgICAgICBtX3BhdXNlT25OZXh0
U3RhdGVtZW50ID0gdHJ1ZTsKICAgICAgICAgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVu
YWJsZWQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlci5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgU291cmNlUHJvdmlk
ZXIqLCBpbnQgZXJyb3JMaW5lTnVtYmVyLCBjb25zdCBXVEY6OlN0cmluZyYgZXJyb3JNZXNzYWdl
KSA9IDA7CiAKLSAgICB2b2lkIGV4Y2VwdGlvbihDYWxsRnJhbWUqLCBKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlLCBib29sIGhhc0hhbmRsZXIpOworICAgIHZvaWQgZXhjZXB0aW9uKENhbGxGcmFtZSos
IEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIGJvb2wgaGFzQ2F0Y2hIYW5kbGVyKTsKICAgICB2b2lk
IGF0U3RhdGVtZW50KENhbGxGcmFtZSopOwogICAgIHZvaWQgY2FsbEV2ZW50KENhbGxGcmFtZSop
OwogICAgIHZvaWQgcmV0dXJuRXZlbnQoQ2FsbEZyYW1lKik7CkBAIC0xMjQsNyArMTI0LDcgQEAg
cHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhK
U0dsb2JhbE9iamVjdCopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZUJyZWFrcG9pbnRIaXQoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBCcmVha3BvaW50JikgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlvbihFeGVj
U3RhdGUqLCBKU1ZhbHVlIGV4Y2VwdGlvbikgY29uc3QgeyBVTlVTRURfUEFSQU0oZXhjZXB0aW9u
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRp
b24oRXhlY1N0YXRlKiwgRXhjZXB0aW9uKikgY29uc3QgeyB9CiAgICAgdmlydHVhbCB2b2lkIGhh
bmRsZVBhdXNlKEpTR2xvYmFsT2JqZWN0KiwgUmVhc29uRm9yUGF1c2UpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCkgeyB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZy
YW1lLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyRXZhbEVuYWJsZXIu
aCIKICNpbmNsdWRlICJEZWJ1Z2dlclNjb3BlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAj
aW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKQEAgLTE3Niw3ICsxNzcsNyBAQCBKU1ZhbHVlIERl
YnVnZ2VyQ2FsbEZyYW1lOjp0aGlzVmFsdWUoKSBjCiB9CiAKIC8vIEV2YWx1YXRlIHNvbWUgSmF2
YVNjcmlwdCBjb2RlIGluIHRoZSBzY29wZSBvZiB0aGlzIGZyYW1lLgotSlNWYWx1ZSBEZWJ1Z2dl
ckNhbGxGcmFtZTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIEpTVmFsdWUmIGV4Y2Vw
dGlvbikKK0pTVmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYg
c2NyaXB0LCBFeGNlcHRpb24qJiBleGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBtX2NhbGxGcmFtZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCShyZXZp
c2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJD
YWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIERlYnVnZ2VyU2NvcGU7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVj
U3RhdGU7CiB0eXBlZGVmIEV4ZWNTdGF0ZSBDYWxsRnJhbWU7CiAKQEAgLTY2LDcgKzY3LDcgQEAg
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBmdW5jdGlvbk5hbWUoKSBjb25z
dDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBUeXBlIHR5cGUoKSBjb25zdDsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBKU1ZhbHVlIHRoaXNWYWx1ZSgpIGNvbnN0OwotICAgIEpTVmFsdWUgZXZhbHVh
dGUoY29uc3QgU3RyaW5nJiwgSlNWYWx1ZSYgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIGV2YWx1
YXRlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbiomKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNv
bnN0IHsgcmV0dXJuICEhbV9jYWxsRnJhbWU7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGludmFsaWRhdGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDE4NTExMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDkgKzEzOSw5IEBAIERlcHJlY2F0ZWQ6OlNjcmlw
dE9iamVjdCBJbmplY3RlZFNjcmlwdE0KICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBKU1ZhbHVlIGdsb2Jh
bFRoaXNWYWx1ZSA9IHNjcmlwdFN0YXRlLT5nbG9iYWxUaGlzVmFsdWUoKTsKIAotICAgIEpTVmFs
dWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV2YWx1YXRpb25FeGNlcHRp
b247CiAgICAgSW5zcGVjdG9yRXZhbHVhdGVIYW5kbGVyIGV2YWx1YXRlSGFuZGxlciA9IG1fZW52
aXJvbm1lbnQuZXZhbHVhdGVIYW5kbGVyKCk7Ci0gICAgSlNWYWx1ZSBmdW5jdGlvblZhbHVlID0g
ZXZhbHVhdGVIYW5kbGVyKHNjcmlwdFN0YXRlLCBzb3VyY2VDb2RlLCBnbG9iYWxUaGlzVmFsdWUs
ICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBldmFs
dWF0ZUhhbmRsZXIoc2NyaXB0U3RhdGUsIHNvdXJjZUNvZGUsIGdsb2JhbFRoaXNWYWx1ZSwgZXZh
bHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAg
IHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRPYmplY3QoKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRW52aXJvbm1lbnQuaAko
cmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JFbnZpcm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMyArMzMsMTQgQEAgY2xh
c3MgU3RvcHdhdGNoOwogfQogCiBuYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4Y2VwdGlvbjsKIGNs
YXNzIFNvdXJjZUNvZGU7CiB9CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIEpT
Qzo6SlNWYWx1ZSAoKkluc3BlY3RvckZ1bmN0aW9uQ2FsbEhhbmRsZXIpKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUgY2FsbFR5
cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVl
LCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKTsKLXR5
cGVkZWYgSlNDOjpKU1ZhbHVlICgqSW5zcGVjdG9yRXZhbHVhdGVIYW5kbGVyKShKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpT
Qzo6SlNWYWx1ZSogZXhjZXB0aW9uKTsKK3R5cGVkZWYgSlNDOjpKU1ZhbHVlICgqSW5zcGVjdG9y
RnVuY3Rpb25DYWxsSGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBm
dW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0
YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYg
YXJncywgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbik7Cit0eXBlZGVmIEpTQzo6
SlNWYWx1ZSAoKkluc3BlY3RvckV2YWx1YXRlSGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OlNvdXJjZUNvZGUmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkV4Y2VwdGlv
biomIHJldHVybmVkRXhjZXB0aW9uKTsKIAogY2xhc3MgSW5zcGVjdG9yRW52aXJvbm1lbnQgewog
cHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9i
amVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0ds
b2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgogI2luY2x1ZGUgIkNvbnNvbGVNZXNz
YWdlLmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKQEAgLTE4OCw3
ICsxODksNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6CiAjZW5k
aWYKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6OnJlcG9ydEFQ
SUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXhjZXB0aW9uKQordm9pZCBKU0ds
b2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6OnJlcG9ydEFQSUV4Y2VwdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIGlmIChpc1Rlcm1pbmF0ZWRF
eGVjdXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAxLDcg
KzIwMiw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjoKIAogICAg
IC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNwZWN0b3I6IFNo
b3VsZCBub3QgZXZhbHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCiAgICAgLy8g
SWYgdGhpcyBpcyBhIGN1c3RvbSBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0
IHRvIHRyeSBhbmQgZ2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNl
cHRpb24uCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi0+dmFs
dWUoKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKIAogICAgIGlmIChKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OmxvZ1RvU3lzdGVt
Q29uc29sZSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xv
YmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmgJ
KHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDcgQEAgY2xhc3MgU3RvcHdhdGNoOwogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENvbnNv
bGVDbGllbnQ7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBKU0ds
b2JhbE9iamVjdDsKIGNsYXNzIEpTVmFsdWU7CkBAIC04MSw3ICs4Miw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldEluY2x1ZGVzTmF0aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4Y2VwdGlvbnMo
Ym9vbCBpbmNsdWRlc05hdGl2ZUNhbGxTdGFjaykgeyBtX2luY2x1ZGVOYXRpdmVDYWxsU3RhY2tX
aXRoRXhjZXB0aW9ucyA9IGluY2x1ZGVzTmF0aXZlQ2FsbFN0YWNrOyB9CiAKICAgICB2b2lkIHBh
dXNlKCk7Ci0gICAgdm9pZCByZXBvcnRBUElFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUgZXhjZXB0aW9uKTsKKyAgICB2b2lkIHJlcG9ydEFQSUV4Y2VwdGlvbihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKik7CiAKICAgICBKU0M6OkNvbnNvbGVDbGllbnQqIGNv
bnNvbGVDbGllbnQoKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2Vy
dmVyLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NCw3ICs1NCw3IEBAIHByaXZhdGU6CiAgICAgLy8gTk9URTogQ3VycmVudGx5IGFsbCBleGNlcHRp
b25zIGFyZSByZXBvcnRlZCBhdCB0aGUgQVBJIGJvdW5kYXJ5IHRocm91Z2ggcmVwb3J0QVBJRXhj
ZXB0aW9uLgogICAgIC8vIFVudGlsIGEgdGltZSBjb21lcyB3aGVyZSBhbiBleGNlcHRpb24gY2Fu
IGJlIGNhdXNlZCBvdXRzaWRlIG9mIHRoZSBBUEkgKGUuZy4gc2V0VGltZW91dAogICAgIC8vIG9y
IHNvbWUgb3RoZXIgYXN5bmMgb3BlcmF0aW9uIGluIGEgcHVyZSBKU0NvbnRleHQpIHdlIGNhbiBp
Z25vcmUgZXhjZXB0aW9ucyByZXBvcnRlZCBoZXJlLgotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRF
eGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpIGNvbnN0IG92ZXJyaWRlIHsg
fQorICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkV4Y2VwdGlvbiopIGNvbnN0IG92ZXJyaWRlIHsgfQogCiAgICAgTGlzdGVuZXJTZXQgbV9saXN0
ZW5lcnM7CiAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCYgbV9nbG9iYWxPYmplY3Q7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKICNpbmNsdWRlICJF
cnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIK
ICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lUHJvdG90eXBlLmgiCkBAIC03NSw3ICs3Niw3IEBAIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6
fkpTSmF2YVNjcmlwdENhbGwKIAogSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBFeGNl
cHRpb24qIGV4Y2VwdGlvbjsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwoKS5ldmFsdWF0ZShl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIGV4Y2VwdGlvbik7
CiAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBleGNlcHRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
YXZhU2NyaXB0Q2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiB2bUVudHJ5R2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxG
cmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpOyB9CiAKICAgICBKU0M6OkpTVmFsdWUgdGhpc1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7IH0K
LSAgICBKU0M6OkpTVmFsdWUgZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIEpTQzo6SlNW
YWx1ZSYgZXhjZXB0aW9uKSBjb25zdCAgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+ZXZh
bHVhdGUoc2NyaXB0LCBleGNlcHRpb24pOyB9CisgICAgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlKGNv
bnN0IFN0cmluZyYgc2NyaXB0LCBKU0M6OkV4Y2VwdGlvbiomIGV4Y2VwdGlvbikgY29uc3QgIHsg
cmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKHNjcmlwdCwgZXhjZXB0aW9uKTsg
fQogCiBwcml2YXRlOgogICAgIEphdmFTY3JpcHRDYWxsRnJhbWUoUGFzc1JlZlB0cjxKU0M6OkRl
YnVnZ2VyQ2FsbEZyYW1lPik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJKHJldmlzaW9uIDE4
NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNr
RmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJT
Y3JpcHRDYWxsU3RhY2tGYWN0b3J5LmgiCiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIlNjcmlwdEFyZ3VtZW50cy5oIgpAQCAtMTI4LDEwICsxMjks
MTAgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFNvdXJjZUluZm9ybWF0aW9uRnJvbQogICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CiB9CiAKLVBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVh
dGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTVmFsdWUmIGV4Y2VwdGlvbiwgc2l6ZV90IG1heFN0YWNrU2l6ZSkKK1Bhc3NSZWZQdHI8U2Ny
aXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uLCBzaXplX3QgbWF4U3RhY2tT
aXplKQogewogICAgIFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+IGZyYW1lczsKLSAgICBSZWZDb3Vu
dGVkQXJyYXk8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZSA9IGV4ZWMtPnZtKCkuZXhjZXB0aW9uU3Rh
Y2soKTsKKyAgICBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZSA9IGV4Y2Vw
dGlvbi0+c3RhY2soKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YWNrVHJhY2Uuc2l6
ZSgpICYmIGkgPCBtYXhTdGFja1NpemU7IGkrKykgewogICAgICAgICB1bnNpZ25lZCBsaW5lOwog
ICAgICAgICB1bnNpZ25lZCBjb2x1bW47CkBAIC0xNDEsOCArMTQyLDggQEAgUGFzc1JlZlB0cjxT
Y3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdAogICAgIH0KIAogICAgIC8vIEZhbGxiYWNrIHRv
IGdldHRpbmcgYXQgbGVhc3QgdGhlIGxpbmUgYW5kIHNvdXJjZVVSTCBmcm9tIHRoZSBleGNlcHRp
b24gb2JqZWN0IGlmIGl0IGhhcyB2YWx1ZXMgYW5kIHRoZSBleGNlcHRpb25TdGFjayBkb2Vzbid0
LgotICAgIEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3QgPSBleGNlcHRpb24udG9PYmplY3QoZXhl
Yyk7Ci0gICAgaWYgKGV4Y2VwdGlvbi5pc09iamVjdCgpKSB7CisgICAgaWYgKGV4Y2VwdGlvbi0+
dmFsdWUoKS5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3Qg
PSBleGNlcHRpb24tPnZhbHVlKCkudG9PYmplY3QoZXhlYyk7CiAgICAgICAgIGludCBsaW5lTnVt
YmVyOwogICAgICAgICBpbnQgY29sdW1uTnVtYmVyOwogICAgICAgICBTdHJpbmcgZXhjZXB0aW9u
U291cmNlVVJMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRD
YWxsU3RhY2tGYWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiBj
bGFzcyBKU1ZhbHVlOwogfQpAQCAtNDcsNyArNDgsNyBAQCBjbGFzcyBTY3JpcHRDYWxsU3RhY2s7
CiAvLyBGSVhNRTogVGhlIHN1YnRsZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZXNlIHNob3VsZCBi
ZSBlbGltaW5hdGVkLgogSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3Rh
Y2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFjayhKU0M6OkV4ZWNTdGF0ZSosIHNpemVfdCBtYXhTdGFj
a1NpemUpOwogSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNy
ZWF0ZVNjcmlwdENhbGxTdGFja0ZvckNvbnNvbGUoSlNDOjpFeGVjU3RhdGUqLCBzaXplX3QgbWF4
U3RhY2tTaXplKTsKLUpTX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNr
PiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlJiBleGNlcHRpb24sIHNpemVfdCBtYXhTdGFja1NpemUpOworSlNfRVhQT1JUX1BS
SVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zy
b21FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiosIHNpemVfdCBtYXhT
dGFja1NpemUpOwogSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+
IGNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHNraXBBcmd1
bWVudENvdW50KTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAko
cmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3Jp
cHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2lu
Y2x1ZGUgIkRlYnVnZ2VyQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJTY29wZS5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTSmF2YVNjcmlwdENhbGxGcmFtZS5o
IgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIK
QEAgLTkzLDcgKzk0LDcgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3Bv
aQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBTY3JpcHRCcmVha3BvaW50QWN0aW9u
VHlwZUV2YWx1YXRlOiB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgICAgICBFeGNl
cHRpb24qIGV4Y2VwdGlvbjsKICAgICAgICAgZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKGJy
ZWFrcG9pbnRBY3Rpb24uZGF0YSwgZXhjZXB0aW9uKTsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikK
ICAgICAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihkZWJ1Z2dlckNhbGxGcmFtZS0+ZXhlYygpLCBl
eGNlcHRpb24pOwpAQCAtMTAzLDEzICsxMDQsMTMgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6
ZXZhbHVhdGVCcmVha3BvaQogICAgICAgICBkaXNwYXRjaEJyZWFrcG9pbnRBY3Rpb25Tb3VuZChk
ZWJ1Z2dlckNhbGxGcmFtZS0+ZXhlYygpLCBicmVha3BvaW50QWN0aW9uLmlkZW50aWZpZXIpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlUHJvYmU6
IHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0
aW9uOwogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGRlYnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0
ZShicmVha3BvaW50QWN0aW9uLmRhdGEsIGV4Y2VwdGlvbik7CiAgICAgICAgIGlmIChleGNlcHRp
b24pCiAgICAgICAgICAgICByZXBvcnRFeGNlcHRpb24oZGVidWdnZXJDYWxsRnJhbWUtPmV4ZWMo
KSwgZXhjZXB0aW9uKTsKICAgICAgICAgCiAgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSA9
IGRlYnVnZ2VyQ2FsbEZyYW1lLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OwotICAgICAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB3cmFwcGVkUmVzdWx0ID0gRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUoc3RhdGUtPnZtKCksIGV4Y2VwdGlvbiA/IGV4Y2VwdGlvbiA6IHJl
c3VsdCk7CisgICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHdyYXBwZWRSZXN1bHQgPSBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShzdGF0ZS0+dm0oKSwgZXhjZXB0aW9uID8gZXhjZXB0aW9u
LT52YWx1ZSgpIDogcmVzdWx0KTsKICAgICAgICAgZGlzcGF0Y2hCcmVha3BvaW50QWN0aW9uUHJv
YmUoc3RhdGUsIGJyZWFrcG9pbnRBY3Rpb24sIHdyYXBwZWRSZXN1bHQpOwogICAgICAgICBicmVh
azsKICAgICB9CkBAIC0zMDIsNyArMzAzLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFu
ZGxlQnJlYWtwb2ludAogICAgIH0KIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxl
RXhjZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTVmFsdWUgZXhjZXB0aW9uKSBjb25zdAordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxl
RXhjZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkV4Y2VwdGlvbiogZXhjZXB0aW9uKSBjb25zdAogewogICAgIHJlcG9ydEV4Y2VwdGlvbihleGVj
LCBleGNlcHRpb24pOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9T
Y3JpcHREZWJ1Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OSw3ICs3OSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29u
dGludWUoSlNDOjpKU0dsb2JhbE9iamVjdCopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcnVuRXZl
bnRMb29wV2hpbGVQYXVzZWQoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudFNjcmlw
dChKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9u
KikgY29uc3QgPSAwOwogCiAgICAgYm9vbCBldmFsdWF0ZUJyZWFrcG9pbnRBY3Rpb24oY29uc3Qg
U2NyaXB0QnJlYWtwb2ludEFjdGlvbiYpOwogCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFyc2VkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpTb3Vy
Y2VQcm92aWRlciosIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNc2cpIG92ZXJy
aWRlIGZpbmFsOwogICAgIHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhKU0M6OkpTR2xv
YmFsT2JqZWN0Kikgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVCcmVha3BvaW50SGl0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6
OkJyZWFrcG9pbnQmKSBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXhj
ZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
IGV4Y2VwdGlvbikgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhj
ZXB0aW9uKikgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBh
dXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkRlYnVnZ2VyOjpSZWFzb25Gb3JQYXVzZSkg
b3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeURvbmVQcm9jZXNzaW5nRGVi
dWdnZXJFdmVudHMoKSBvdmVycmlkZSBmaW5hbDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCwxMSArMjQsMTEgQEAKICNkZWZpbmUgQ2FsbEZyYW1lX2gKIAogI2luY2x1ZGUgIkFi
c3RyYWN0UEMuaCIKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2lu
Y2x1ZGUgIlN0YWNrVmlzaXRvci5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiVk1FbnRy
eVJlY29yZC5oIgogCiBuYW1lc3BhY2UgSlNDICB7CkBAIC03NSwxMyArNzUsOSBAQCBuYW1lc3Bh
Y2UgSlNDICB7CiAgICAgICAgIC8vIEJ1dCB0aGV5J3JlIHVzZWQgaW4gbWFueSBwbGFjZXMgaW4g
bGVnYWN5IGNvZGUsIHNvIHRoZXkncmUgbm90IGdvaW5nIGF3YXkgYW55IHRpbWUgc29vbi4KIAog
ICAgICAgICB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyB2bSgpLmNsZWFyRXhjZXB0aW9uKCk7IH0K
LSAgICAgICAgdm9pZCBjbGVhclN1cHBsZW1lbnRhcnlFeGNlcHRpb25JbmZvKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdm0oKS5jbGVhckV4Y2VwdGlvblN0YWNrKCk7Ci0gICAgICAgIH0KIAot
ICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIHZtKCkuZXhjZXB0aW9u
KCk7IH0KLSAgICAgICAgYm9vbCBoYWRFeGNlcHRpb24oKSBjb25zdCB7IHJldHVybiAhdm0oKS5l
eGNlcHRpb24oKS5pc0VtcHR5KCk7IH0KKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKSBj
b25zdCB7IHJldHVybiB2bSgpLmV4Y2VwdGlvbigpOyB9CisgICAgICAgIGJvb2wgaGFkRXhjZXB0
aW9uKCkgY29uc3QgeyByZXR1cm4gISF2bSgpLmV4Y2VwdGlvbigpOyB9CiAKICAgICAgICAgQXRv
bWljU3RyaW5nVGFibGUqIGF0b21pY1N0cmluZ1RhYmxlKCkgY29uc3QgeyByZXR1cm4gdm0oKS5h
dG9taWNTdHJpbmdUYWJsZSgpOyB9CiAgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBw
cm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKnZtKCkucHJvcGVydHlOYW1lczsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5j
bHVkZSAiRGVidWdnZXJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJFcnJvckluc3RhbmNlLmgiCiAj
aW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNs
dWRlICJKU0FycmF5LmgiCkBAIC00MzUsNyArNDM2LDcgQEAgc3RhdGljIGJvb2wgdW53aW5kQ2Fs
bEZyYW1lKFN0YWNrVmlzaXRvcgogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gdmlzaXRv
ci0+Y2FsbEZyYW1lKCk7CiAgICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+
dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7Ci0gICAgICAgIENsZWFyRXhjZXB0
aW9uU2NvcGUgc2NvcGUoJmNhbGxGcmFtZS0+dm0oKSk7CisgICAgICAgIFN1c3BlbmRFeGNlcHRp
b25TY29wZSBzY29wZSgmY2FsbEZyYW1lLT52bSgpKTsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nh
c3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkpKQogICAgICAgICAgICAgZGVidWdn
ZXItPnJldHVybkV2ZW50KGNhbGxGcmFtZSk7CiAgICAgICAgIGVsc2UKQEAgLTU4Myw5ICs1ODQs
OSBAQCBKU1N0cmluZyogSW50ZXJwcmV0ZXI6OnN0YWNrVHJhY2VBc1N0cmluCiAgICAgcmV0dXJu
IGpzU3RyaW5nKCZleGVjLT52bSgpLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCi1jbGFzcyBH
ZXRFeGNlcHRpb25IYW5kbGVyRnVuY3RvciB7CitjbGFzcyBHZXRDYXRjaEhhbmRsZXJGdW5jdG9y
IHsKIHB1YmxpYzoKLSAgICBHZXRFeGNlcHRpb25IYW5kbGVyRnVuY3RvcigpCisgICAgR2V0Q2F0
Y2hIYW5kbGVyRnVuY3RvcigpCiAgICAgICAgIDogbV9oYW5kbGVyKDApCiAgICAgewogICAgIH0K
QEAgLTU5OSw3ICs2MDAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNp
dG9yOjpDb250aW51ZTsKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHZpc2l0
b3ItPmJ5dGVjb2RlT2Zmc2V0KCk7Ci0gICAgICAgIG1faGFuZGxlciA9IGNvZGVCbG9jay0+aGFu
ZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgY29uc3QgYm9v
bCBSZXF1aXJlQ2F0Y2hIYW5kbGVyID0gdHJ1ZTsKKyAgICAgICAgbV9oYW5kbGVyID0gY29kZUJs
b2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVDYXRj
aEhhbmRsZXIpOwogICAgICAgICBpZiAobV9oYW5kbGVyKQogICAgICAgICAgICAgcmV0dXJuIFN0
YWNrVmlzaXRvcjo6RG9uZTsKIApAQCAtNjQ5LDExICs2NTEsMTIgQEAgcHJpdmF0ZToKICAgICBI
YW5kbGVySW5mbyomIG1faGFuZGxlcjsKIH07CiAKLU5FVkVSX0lOTElORSBIYW5kbGVySW5mbyog
SW50ZXJwcmV0ZXI6OnVud2luZChWTUVudHJ5RnJhbWUqJiB2bUVudHJ5RnJhbWUsIENhbGxGcmFt
ZSomIGNhbGxGcmFtZSwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUpCitORVZFUl9JTkxJTkUgSGFu
ZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk1FbnRyeUZyYW1lKiYgdm1FbnRyeUZyYW1l
LCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBib29sIGlz
VGVybWluYXRpb24gPSBmYWxzZTsKIAorICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGNl
cHRpb24tPnZhbHVlKCk7CiAgICAgQVNTRVJUKCFleGNlcHRpb25WYWx1ZS5pc0VtcHR5KCkpOwog
ICAgIEFTU0VSVCghZXhjZXB0aW9uVmFsdWUuaXNDZWxsKCkgfHwgZXhjZXB0aW9uVmFsdWUuYXND
ZWxsKCkpOwogICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIHBvc3NpYmxlIChoZW5jZSB0aGUgYXNz
ZXJ0aW9ucyksIGJ1dCB3ZSdyZSBhbHJlYWR5IGluIHRoZSBzbG93ZXN0IG9mCkBAIC02NjIsMzIg
KzY2NSwzNSBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1CiAgICAg
ICAgIGV4Y2VwdGlvblZhbHVlID0ganNOdWxsKCk7CiAKICAgICBpZiAoZXhjZXB0aW9uVmFsdWUu
aXNPYmplY3QoKSkKLSAgICAgICAgaXNUZXJtaW5hdGlvbiA9IGlzVGVybWluYXRlZEV4ZWN1dGlv
bkV4Y2VwdGlvbihhc09iamVjdChleGNlcHRpb25WYWx1ZSkpOworICAgICAgICBpc1Rlcm1pbmF0
aW9uID0gaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbik7CiAKLSAgICBB
U1NFUlQoY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvblN0YWNrKCkuc2l6ZSgpKTsKKyAgICBBU1NF
UlQoY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbigpICYmIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRp
b24oKS0+c3RhY2soKS5zaXplKCkpOwogCiAgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZy
YW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7Ci0gICAgaWYgKGRlYnVnZ2Vy
ICYmIGRlYnVnZ2VyLT5uZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcygpKSB7Ci0gICAgICAgIC8vIFdl
IG5lZWQgdG8gY2xlYXIgdGhlIGV4Y2VwdGlvbiBhbmQgdGhlIGV4Y2VwdGlvbiBzdGFjayBoZXJl
IGluIG9yZGVyIHRvIHNlZSBpZiBhIG5ldyBleGNlcHRpb24gaGFwcGVucy4KKyAgICBpZiAoZGVi
dWdnZXIgJiYgZGVidWdnZXItPm5lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKCkgJiYgIWV4Y2VwdGlv
bi0+ZGlkTm90aWZ5SW5zcGVjdG9yT2ZUaHJvdygpKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8g
Y2xlYXIgdGhlIGV4Y2VwdGlvbiBoZXJlIGluIG9yZGVyIHRvIHNlZSBpZiBhIG5ldyBleGNlcHRp
b24gaGFwcGVucy4KICAgICAgICAgLy8gQWZ0ZXJ3YXJkcywgdGhlIHZhbHVlcyBhcmUgcHV0IGJh
Y2sgdG8gY29udGludWUgcHJvY2Vzc2luZyB0aGlzIGVycm9yLgotICAgICAgICBDbGVhckV4Y2Vw
dGlvblNjb3BlIHNjb3BlKCZjYWxsRnJhbWUtPnZtKCkpOworICAgICAgICBTdXNwZW5kRXhjZXB0
aW9uU2NvcGUgc2NvcGUoJmNhbGxGcmFtZS0+dm0oKSk7CiAgICAgICAgIC8vIFRoaXMgY29kZSBh
c3N1bWVzIHRoYXQgaWYgdGhlIGRlYnVnZ2VyIGlzIGVuYWJsZWQgdGhlbiB0aGVyZSBpcyBubyBp
bmxpbmluZy4KICAgICAgICAgLy8gSWYgdGhhdCBhc3N1bXB0aW9uIHR1cm5zIG91dCB0byBiZSBm
YWxzZSB0aGVuIHdlJ2xsIGlnbm9yZSB0aGUgaW5saW5lZCBjYWxsCiAgICAgICAgIC8vIGZyYW1l
cy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MTc1NAogCi0gICAgICAgIGJvb2wgaGFzSGFuZGxlcjsKKyAgICAgICAgYm9vbCBoYXNDYXRjaEhh
bmRsZXI7CiAgICAgICAgIGlmIChpc1Rlcm1pbmF0aW9uKQotICAgICAgICAgICAgaGFzSGFuZGxl
ciA9IGZhbHNlOworICAgICAgICAgICAgaGFzQ2F0Y2hIYW5kbGVyID0gZmFsc2U7CiAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgR2V0RXhjZXB0aW9uSGFuZGxlckZ1bmN0b3IgZnVuY3RvcjsK
KyAgICAgICAgICAgIEdldENhdGNoSGFuZGxlckZ1bmN0b3IgZnVuY3RvcjsKICAgICAgICAgICAg
IGNhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKLSAgICAgICAgICAgIGhhc0hhbmRsZXIgPSAh
IWZ1bmN0b3IuaGFuZGxlcigpOworICAgICAgICAgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSBm
dW5jdG9yLmhhbmRsZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCghaGFuZGxlciB8fCBoYW5kbGVy
LT5pc0NhdGNoSGFuZGxlcigpKTsKKyAgICAgICAgICAgIGhhc0NhdGNoSGFuZGxlciA9ICEhaGFu
ZGxlcjsKICAgICAgICAgfQogCi0gICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oY2FsbEZyYW1l
LCBleGNlcHRpb25WYWx1ZSwgaGFzSGFuZGxlcik7CisgICAgICAgIGRlYnVnZ2VyLT5leGNlcHRp
b24oY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgaGFzQ2F0Y2hIYW5kbGVyKTsKICAgICAgICAg
QVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKICAgICB9CisgICAgZXhjZXB0aW9u
LT5zZXREaWROb3RpZnlJbnNwZWN0b3JPZlRocm93KCk7CiAKICAgICAvLyBDYWxjdWxhdGUgYW4g
ZXhjZXB0aW9uIGhhbmRsZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5
LgogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODUxMTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTgsMjAgKzk4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGV4cHJlc3Npb25JbmZvKGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zm
c2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbik7CiAgICAgfTsKIAotICAgIGNs
YXNzIENsZWFyRXhjZXB0aW9uU2NvcGUgeworICAgIGNsYXNzIFN1c3BlbmRFeGNlcHRpb25TY29w
ZSB7CiAgICAgcHVibGljOgotICAgICAgICBDbGVhckV4Y2VwdGlvblNjb3BlKFZNKiB2bSk6IG1f
dm0odm0pCisgICAgICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZShWTSogdm0pCisgICAgICAgICAg
ICA6IG1fdm0odm0pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZtLT5nZXRFeGNlcHRpb25JbmZv
KG9sZEV4Y2VwdGlvbiwgb2xkRXhjZXB0aW9uU3RhY2spOworICAgICAgICAgICAgb2xkRXhjZXB0
aW9uID0gdm0tPmV4Y2VwdGlvbigpOwogICAgICAgICAgICAgdm0tPmNsZWFyRXhjZXB0aW9uKCk7
CiAgICAgICAgIH0KLSAgICAgICAgfkNsZWFyRXhjZXB0aW9uU2NvcGUoKQorICAgICAgICB+U3Vz
cGVuZEV4Y2VwdGlvblNjb3BlKCkKICAgICAgICAgewotICAgICAgICAgICAgbV92bS0+c2V0RXhj
ZXB0aW9uSW5mbyhvbGRFeGNlcHRpb24sIG9sZEV4Y2VwdGlvblN0YWNrKTsKKyAgICAgICAgICAg
IG1fdm0tPnNldEV4Y2VwdGlvbihvbGRFeGNlcHRpb24pOwogICAgICAgICB9CiAgICAgcHJpdmF0
ZToKLSAgICAgICAgSlNDOjpKU1ZhbHVlIG9sZEV4Y2VwdGlvbjsKLSAgICAgICAgUmVmQ291bnRl
ZEFycmF5PEpTQzo6U3RhY2tGcmFtZT4gb2xkRXhjZXB0aW9uU3RhY2s7CisgICAgICAgIEV4Y2Vw
dGlvbiogb2xkRXhjZXB0aW9uOwogICAgICAgICBWTSogbV92bTsKICAgICB9OwogICAgIApAQCAt
MjE1LDcgKzIxNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgU2FtcGxp
bmdUb29sKiBzYW1wbGVyKCkgeyByZXR1cm4gbV9zYW1wbGVyLmdldCgpOyB9CiAKLSAgICAgICAg
TkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiB1bndpbmQoVk1FbnRyeUZyYW1lKiYsIENhbGxGcmFt
ZSomLCBKU1ZhbHVlJik7CisgICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdW53aW5k
KFZNRW50cnlGcmFtZSomLCBDYWxsRnJhbWUqJiwgRXhjZXB0aW9uKik7CiAgICAgICAgIE5FVkVS
X0lOTElORSB2b2lkIGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9va0lEKTsKICAgICAgICAgSlNT
dHJpbmcqIHN0YWNrVHJhY2VBc1N0cmluZyhFeGVjU3RhdGUqLCBWZWN0b3I8U3RhY2tGcmFtZT4p
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw3ICsyMjMsNyBAQCBBc3NlbWJs
eUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjplCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICByZXN1bHQgPSBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5v
blplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkp
KTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgcmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9
PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVz
cyhyZWludGVycHJldF9jYXN0PGNoYXIqPih2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAgcmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9PSBOb3Jt
YWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyh2bSgp
LT5hZGRyZXNzT2ZFeGNlcHRpb24oKSksIFRydXN0ZWRJbW0zMigwKSk7CiAjZW5kaWYKICAgICAK
ICAgICBpZiAod2lkdGggPT0gTm9ybWFsSnVtcFdpZHRoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCwxNiArNDAsMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgZ2VuZXJpY1Vud2lu
ZChWTSogdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlKQor
dm9pZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUpCiB7CiAgICAg
aWYgKE9wdGlvbnM6OmJyZWFrT25UaHJvdygpKSB7CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwg
ZnJhbWUgIiwgUmF3UG9pbnRlcihjYWxsRnJhbWUpLCAiIGZvciBjb2RlIGJsb2NrICIsICpjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLCAiXG4iKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAgICAg
Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uVmFsdWUpOworICAgIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uID0gdm0tPmV4Y2VwdGlvbigpOworICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2VwdGlvbik7
CiAgICAgVk1FbnRyeUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwot
ICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gdm0tPmludGVycHJldGVyLT51bndpbmQodm1FbnRy
eUZyYW1lLCBjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlKTsgLy8gVGhpcyBtYXkgdXBkYXRlIHZt
RW50cnlGcmFtZSBhbmQgY2FsbEZyYW1lLgorICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gdm0t
PmludGVycHJldGVyLT51bndpbmQodm1FbnRyeUZyYW1lLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7
IC8vIFRoaXMgbWF5IHVwZGF0ZSB2bUVudHJ5RnJhbWUgYW5kIGNhbGxGcmFtZS4KIAogICAgIHZv
aWQqIGNhdGNoUm91dGluZTsKICAgICBJbnN0cnVjdGlvbiogY2F0Y2hQQ0ZvckludGVycHJldGVy
ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCShy
ZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNs
YXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIFZNOwogCi12b2lkIGdlbmVyaWNVbndpbmQoVk0qLCBFeGVj
U3RhdGUqLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlKTsKK3ZvaWQgZ2VuZXJpY1Vud2luZChWTSos
IEV4ZWNTdGF0ZSopOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTg1MTEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNp
bmNsdWRlICJEZWJ1Z2dlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpJ
VElubGluZXMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCkBA
IC05Nyw3ICs5OCw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYK
ICNlbmRpZiAvLyBDUFUoWDg2KQogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGV4Y2VwdGlvbgotICAg
IEp1bXAgc2F3RXhjZXB0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhy
ZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
RW1wdHlWYWx1ZVRhZykpOyAKKyAgICBKdW1wIHNhd0V4Y2VwdGlvbiA9IGJyYW5jaDMyKE5vdEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3Modm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwgVHJ1c3RlZElt
bTMyKDApKTsKIAogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgLy8gUmV0dXJuLgpA
QCAtODI5LDEzICs4MzAsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24q
IGN1cgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVC
bG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogCiAgICAgLy8gTm93IHN0b3JlIHRoZSBleGNlcHRpb24gcmV0dXJuZWQg
Ynkgb3BlcmF0aW9uVGhyb3cuCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRp
b25PZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSks
IHJlZ1QwKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgp
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7Ci0gICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZSgpLnBheWxvYWQoKSksIEFkZHJlc3MocmVnVDMs
IFZNOjpleGNlcHRpb25PZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy5wYXlsb2FkKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWUoKS50YWcoKSks
IEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpl
eGNlcHRpb25PZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSwgcmVnVDEpOworCisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJl
c3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSkpOwogCiAgICAgdW5zaWduZWQgZXhjZXB0
aW9uID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBlbWl0U3RvcmUoZXhj
ZXB0aW9uLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRTdG9yZShleGNlcHRpb24sIHJlZ1QxLCBy
ZWdUMik7CisKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgRXhjZXB0aW9uOjp2YWx1ZU9mZnNl
dCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDAp
OworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QyLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKKworICAgIHVu
c2lnbmVkIHRocm93blZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAg
ICBlbWl0U3RvcmUodGhyb3duVmFsdWUsIHJlZ1QxLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkJhc2ljQmxvY2tMb2NhdGlvbi5oIgog
I2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisj
aW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkpJVElu
bGluZXMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCkBAIC01MjksNiArNTMwLDkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogICAgIGxvYWQ2NChBZGRyZXNzKHJl
Z1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgc3RvcmU2NChUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhj
ZXB0aW9uT2Zmc2V0KCkpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOworCisgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIEV4Y2Vw
dGlvbjo6dmFsdWVPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9zd2l0Y2hfaW1tKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4NTEx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4MjMsNyArMTgyMyw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25UaHJvdyhFeGVjU3QKICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFs
dWUpOwogCiAgICAgLy8gUmVzdWx0cyBzdG9yZWQgb3V0LW9mLWJhbmQgaW4gdm0udGFyZ2V0TWFj
aGluZVBDRm9yVGhyb3csIHZtLmNhbGxGcmFtZUZvclRocm93ICYgdm0udm1FbnRyeUZyYW1lRm9y
VGhyb3cKLSAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSk7CisgICAg
Z2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkK
QEAgLTE4NjIsMTEgKzE4NjIsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5pdEds
b2JhbENvCiB2b2lkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihWTSogdm0s
IEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKLQotICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSB2bS0+ZXhjZXB0aW9uKCk7
Ci0gICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKLSAgICAKLSAgICBnZW5lcmljVW53aW5kKHZt
LCBleGVjLCBleGNlcHRpb25WYWx1ZSk7CisgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CiAg
ICAgQVNTRVJUKHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKQEAgLTE4NzcsMTEg
KzE4NzMsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlCiAgICAg
QVNTRVJUKGNhbGxlckZyYW1lKTsKIAogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0
b3JlIHRyYWNlcih2bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7Ci0KLSAgICBKU1ZhbHVl
IGV4Y2VwdGlvblZhbHVlID0gdm0tPmV4Y2VwdGlvbigpOwotICAgIEFTU0VSVChleGNlcHRpb25W
YWx1ZSk7Ci0gICAgCi0gICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbGVyRnJhbWUsIGV4Y2VwdGlv
blZhbHVlKTsKKyAgICBnZW5lcmljVW53aW5kKHZtLCBjYWxsZXJGcmFtZSk7CiAgICAgQVNTRVJU
KHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKQEAgLTE4ODksOCArMTg4MSw3IEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25WTUhhbmRsZUV4Y2UKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKLQotICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIHZtLT5leGNlcHRpb24oKSk7CisgICAg
Z2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CiB9CiAKIC8vIFRoaXMgZnVuY3Rpb24gInNob3VsZCIg
anVzdCB0YWtlIHRoZSBFeGVjU3RhdGUqLCBidXQgZG9pbmcgc28gd291bGQgbWFrZSBpdCBtb3Jl
IGRpZmZpY3VsdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksOCArMzQ5LDggQEAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogI2Vsc2UKICAgICBKU0lu
dGVyZmFjZUpJVDo6SnVtcCBleGNlcHRpb25IYW5kbGVyID0gaml0LmJyYW5jaDMyKAogICAgICAg
ICBKU0ludGVyZmFjZUpJVDo6Tm90RXF1YWwsCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpBYnNv
bHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmFkZHJlc3NPZkV4Y2VwdGlv
bigpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSksCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlW
YWx1ZVRhZykpOworICAgICAgICBKU0ludGVyZmFjZUpJVDo6QWJzb2x1dGVBZGRyZXNzKHZtLT5h
ZGRyZXNzT2ZFeGNlcHRpb24oKSksCisgICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1t
MzIoMCkpOwogI2VuZGlmCiAKICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRy
YWN0b3IuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgi
CiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAj
aW5jbHVkZSAiRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc1LDggKzEzNzUs
NyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV9kCiBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfaGFuZGxlX2V4Y2VwdGlvbikKIHsKICAgICBMTElOVF9CRUdJ
Tl9OT19TRVRfUEMoKTsKLSAgICBBU1NFUlQodm0uZXhjZXB0aW9uKCkpOwotICAgIGdlbmVyaWNV
bndpbmQoJnZtLCBleGVjLCB2bS5leGNlcHRpb24oKSk7CisgICAgZ2VuZXJpY1Vud2luZCgmdm0s
IGV4ZWMpOwogICAgIExMSU5UX0VORF9JTVBMKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
CShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNjkzLDcgKzY5Myw3IEBA
IG1hY3JvIGJyYW5jaElmRXhjZXB0aW9uKGxhYmVsKQogICAgIGxvYWRwIENhbGxlZSArIFBheWxv
YWRPZmZzZXRbY2ZyXSwgdDMKICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKICAgICBsb2Fk
cCBNYXJrZWRCbG9jazo6bV93ZWFrU2V0ICsgV2Vha1NldDo6bV92bVt0M10sIHQzCi0gICAgYmll
cSBWTTo6bV9leGNlcHRpb24gKyBUYWdPZmZzZXRbdDNdLCBFbXB0eVZhbHVlVGFnLCAubm9FeGNl
cHRpb24KKyAgICBidGl6IFZNOjptX2V4Y2VwdGlvblt0M10sIC5ub0V4Y2VwdGlvbgogICAgIGpt
cCBsYWJlbAogLm5vRXhjZXB0aW9uOgogZW5kCkBAIC0xOTUyLDE1ICsxOTUyLDIwIEBAIF9sbGlu
dF9vcF9jYXRjaDoKICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKIAogICAgIGxv
YWRpIFZNOjp0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQwotICAgIGxvYWRpIFZN
OjptX2V4Y2VwdGlvbiArIFBheWxvYWRPZmZzZXRbdDNdLCB0MAotICAgIGxvYWRpIFZNOjptX2V4
Y2VwdGlvbiArIFRhZ09mZnNldFt0M10sIHQxCi0gICAgc3RvcmVpIDAsIFZNOjptX2V4Y2VwdGlv
biArIFBheWxvYWRPZmZzZXRbdDNdCi0gICAgc3RvcmVpIEVtcHR5VmFsdWVUYWcsIFZNOjptX2V4
Y2VwdGlvbiArIFRhZ09mZnNldFt0M10KKyAgICBsb2FkaSBWTTo6bV9leGNlcHRpb25bdDNdLCB0
MAorICAgIHN0b3JlaSAwLCBWTTo6bV9leGNlcHRpb25bdDNdCiAgICAgbG9hZGkgNFtQQ10sIHQy
CiAgICAgc3RvcmVpIHQwLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDIsIDhdCisgICAgc3RvcmVpIENl
bGxUYWcsIFRhZ09mZnNldFtjZnIsIHQyLCA4XQorCisgICAgbG9hZGkgRXhjZXB0aW9uOjptX3Zh
bHVlICsgVGFnT2Zmc2V0W3QwXSwgdDEKKyAgICBsb2FkaSBFeGNlcHRpb246Om1fdmFsdWUgKyBQ
YXlsb2FkT2Zmc2V0W3QwXSwgdDAKKyAgICBsb2FkaSA4W1BDXSwgdDIKKyAgICBzdG9yZWkgdDAs
IFBheWxvYWRPZmZzZXRbY2ZyLCB0MiwgOF0KICAgICBzdG9yZWkgdDEsIFRhZ09mZnNldFtjZnIs
IHQyLCA4XQorCiAgICAgdHJhY2VFeGVjdXRpb24oKSAgIyBUaGlzIG5lZWRzIHRvIGJlIGhlcmUg
YmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGNsb2JiZXIgdDAsIHQxLCB0MiwgdDMgYWJvdmUuCi0g
ICAgZGlzcGF0Y2goMikKKyAgICBkaXNwYXRjaCgzKQogCiBfbGxpbnRfb3BfZW5kOgogICAgIHRy
YWNlRXhlY3V0aW9uKCkKQEAgLTIwMzgsNyArMjA0Myw3IEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFt
cG9saW5lKGV4ZWN1dGFibGVPZmYKICAgICBlbmQKICAgICAKICAgICBmdW5jdGlvbkVwaWxvZ3Vl
KCkKLSAgICBiaW5lcSBWTTo6bV9leGNlcHRpb24gKyBUYWdPZmZzZXRbdDNdLCBFbXB0eVZhbHVl
VGFnLCAuaGFuZGxlRXhjZXB0aW9uCisgICAgYnRpbnogVk06Om1fZXhjZXB0aW9uW3QzXSwgLmhh
bmRsZUV4Y2VwdGlvbgogICAgIHJldAogCiAuaGFuZGxlRXhjZXB0aW9uOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20JKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xODIwLDEyICsxODIwLDE4
IEBAIF9sbGludF9vcF9jYXRjaDoKICAgICBsb2FkcCBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0Zv
clRocm93W3QzXSwgUEMKICAgICBzdWJwIFBCLCBQQwogICAgIHJzaGlmdHAgMywgUEMKKwogICAg
IGxvYWRxIFZNOjptX2V4Y2VwdGlvblt0M10sIHQwCiAgICAgc3RvcmVxIDAsIFZNOjptX2V4Y2Vw
dGlvblt0M10KICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDIpCiAgICAgc3RvcmVxIHQw
LCBbY2ZyLCB0MiwgOF0KKworICAgIGxvYWRxIEV4Y2VwdGlvbjo6bV92YWx1ZVt0MF0sIHQzCisg
ICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQyKQorICAgIHN0b3JlcSB0MywgW2NmciwgdDIs
IDhdCisKICAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgZGlzcGF0Y2goMikKKyAgICBkaXNwYXRj
aCgzKQogCiAKIF9sbGludF9vcF9lbmQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgxMSwxMCArODExLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAg
ICBpbmxpbmUgVHJ5Tm9kZTo6VHJ5Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBTdGF0ZW1lbnROb2RlKiB0cnlCbG9jaywgY29uc3QgSWRlbnRpZmllciYgZXhjZXB0aW9uSWRl
bnQsIFN0YXRlbWVudE5vZGUqIGNhdGNoQmxvY2ssIFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9j
aykKKyAgICBpbmxpbmUgVHJ5Tm9kZTo6VHJ5Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBTdGF0ZW1lbnROb2RlKiB0cnlCbG9jaywgY29uc3QgSWRlbnRpZmllciYgdGhyb3du
VmFsdWVJZGVudCwgU3RhdGVtZW50Tm9kZSogY2F0Y2hCbG9jaywgU3RhdGVtZW50Tm9kZSogZmlu
YWxseUJsb2NrKQogICAgICAgICA6IFN0YXRlbWVudE5vZGUobG9jYXRpb24pCiAgICAgICAgICwg
bV90cnlCbG9jayh0cnlCbG9jaykKLSAgICAgICAgLCBtX2V4Y2VwdGlvbklkZW50KGV4Y2VwdGlv
bklkZW50KQorICAgICAgICAsIG1fdGhyb3duVmFsdWVJZGVudCh0aHJvd25WYWx1ZUlkZW50KQog
ICAgICAgICAsIG1fY2F0Y2hCbG9jayhjYXRjaEJsb2NrKQogICAgICAgICAsIG1fZmluYWxseUJs
b2NrKGZpbmFsbHlCbG9jaykKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9O
b2Rlcy5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MTEsNyArMTUxMSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKIAogICAgICAgICBTdGF0ZW1lbnROb2RlKiBt
X3RyeUJsb2NrOwotICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBtX2V4Y2VwdGlvbklkZW50Owor
ICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBtX3Rocm93blZhbHVlSWRlbnQ7CiAgICAgICAgIFN0
YXRlbWVudE5vZGUqIG1fY2F0Y2hCbG9jazsKICAgICAgICAgU3RhdGVtZW50Tm9kZSogbV9maW5h
bGx5QmxvY2s7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
bGxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWxsRGF0YS5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhbGxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhbGxEYXRhLmgiCiAKKyNpbmNsdWRlICJFeGNl
cHRpb24uaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIu
aCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCkBAIC0zOSwxNSArNDAsMTUgQEAgSlNWYWx1ZSBj
YWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdQogICAgIHJldHVybiBleGVjLT5pbnRlcnBy
ZXRlcigpLT5leGVjdXRlQ2FsbChleGVjLCBhc09iamVjdChmdW5jdGlvbk9iamVjdCksIGNhbGxU
eXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsKIH0KIAotSlNWYWx1ZSBjYWxsKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNv
bnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MsIEpTVmFsdWUqIGV4Y2VwdGlvbikKK0pTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0
YSYgY2FsbERhdGEsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBFeGNl
cHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwo
ZXhlYywgZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdz
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgaWYgKGV4Y2VwdGlv
bikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAg
cmV0dXJuZWRFeGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKICAgICAgICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQorICAg
IH0gZWxzZQorICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IG51bGxwdHI7CiAgICAgUkVMRUFT
RV9BU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQXJnTGlzdDsKK2NsYXNzIEV4
Y2VwdGlvbjsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKIGNs
YXNzIEpTT2JqZWN0OwpAQCAtNTgsNyArNTksNyBAQCB1bmlvbiBDYWxsRGF0YSB7CiB9OwogCiBK
U19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlv
bk9iamVjdCwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKTsKLUpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUq
LCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUqIGV4Y2VwdGlvbik7CitKU19F
WFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9i
amVjdCwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmLCBFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0
aW9uLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAi
RGVidWdnZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJbnRlcnByZXRl
ci5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCkBA
IC02MCwxOSArNjEsMTggQEAgYm9vbCBjaGVja1N5bnRheChWTSYgdm0sIGNvbnN0IFNvdXJjZUNv
ZAogICAgICAgICBKU1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdCwgSlNQYXJzZXJDb2RlVHlw
ZTo6UHJvZ3JhbSwgZXJyb3IpOwogfQogCi1KU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSog
cmV0dXJuZWRFeGNlcHRpb24pCitKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgRXhjZXB0aW9uKiYgcmV0
dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUkVM
RUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERh
dGEoKS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+dm0o
KS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBudWxscHRyOwog
CiAgICAgQ29kZVByb2ZpbGluZyBwcm9maWxlKHNvdXJjZSk7CiAKICAgICBQcm9ncmFtRXhlY3V0
YWJsZSogcHJvZ3JhbSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsK
ICAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAg
ICAgICAgICAgKnJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+dm0oKS5leGNlcHRpb24oKTsKLQor
ICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCk7CiAgICAg
ICAgIGV4ZWMtPnZtKCkuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgfQpAQCAtODMsOSArODMsNyBAQCBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBleGVjLT5pbnRlcnByZXRlcigp
LT5leGVjdXRlKHByb2dyYW0sIGV4ZWMsIHRoaXNPYmopOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7Ci0gICAgICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikKLSAgICAgICAgICAg
ICpyZXR1cm5lZEV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotCisgICAgICAgIHJldHVy
bmVkRXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgJKHJldmlzaW9uIDE4NTEx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsOCBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7Ci0gICAgCisKK2NsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIEV4ZWNTdGF0ZTsK
IGNsYXNzIEpTU2NvcGU7CiBjbGFzcyBQYXJzZXJFcnJvcjsKQEAgLTM1LDcgKzM2LDEyIEBAIGNs
YXNzIFZNOwogCiBKU19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNrU3ludGF4KFZNJiwgY29uc3Qg
U291cmNlQ29kZSYsIFBhcnNlckVycm9yJik7CiBKU19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNr
U3ludGF4KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlKiBleGNlcHRpb24g
PSAwKTsKLUpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgY29u
c3QgU291cmNlQ29kZSYsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZSgpLCBKU1ZhbHVlKiBl
eGNlcHRpb24gPSAwKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0
YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBFeGNlcHRpb24qJiBy
ZXR1cm5lZEV4Y2VwdGlvbik7CitpbmxpbmUgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNW
YWx1ZSgpKQoreworICAgIEV4Y2VwdGlvbiogdW51c2VkOworICAgIHJldHVybiBldmFsdWF0ZShl
eGVjLCBzb3VyY2VDb2RlLCB0aGlzVmFsdWUsIHVudXNlZCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgJKHJldmlzaW9u
IDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRo
cm93VHlwZUVycgogSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93U3ludGF4RXJyb3Io
RXhlY1N0YXRlKik7CiAKIC8vIENvbnZlbmllbmNlIHdyYXBwZXJzLCB3cmFwIHJlc3VsdCBhcyBh
biBFbmNvZGVkSlNWYWx1ZS4KK2lubGluZSB2b2lkIHRocm93Vk1FcnJvcihFeGVjU3RhdGUqIGV4
ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKSB7IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhl
YywgZXhjZXB0aW9uKTsgfQogaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1FcnJvcihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXJyb3IpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVj
LT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGVycm9yKSk7IH0KIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSB0aHJvd1ZNVHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMpKTsgfQogaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRo
cm93Vk1UeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSkgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIGVycm9yTWVz
c2FnZSkpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gRXhjZXB0aW9uOjpzX2luZm8gPSB7ICJFeGNlcHRp
b24iLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEV4Y2VwdGlvbikgfTsK
KworRXhjZXB0aW9uKiBFeGNlcHRpb246OmNyZWF0ZShWTSYgdm0sIEpTVmFsdWUgdGhyb3duVmFs
dWUpCit7CisgICAgRXhjZXB0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxFeGNlcHRpb24+KHZtLmhlYXApKSBFeGNlcHRpb24odm0sIHRocm93blZhbHVlKTsKKyAgICBy
ZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IEV4Y2VwdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgRXhjZXB0aW9uKiBleGNl
cHRpb24gPSBzdGF0aWNfY2FzdDxFeGNlcHRpb24qPihjZWxsKTsKKyAgICBleGNlcHRpb24tPkV4
Y2VwdGlvbjo6fkV4Y2VwdGlvbigpOworfQorCitTdHJ1Y3R1cmUqIEV4Y2VwdGlvbjo6Y3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworfQorCit2b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEV4Y2VwdGlvbiogdGhpc09iamVjdCA9IGpzQ2Fz
dDxFeGNlcHRpb24qPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKKworICAgIGlmICghdGhpc09iamVjdC0+bV92YWx1ZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghdGhpc09iamVjdC0+bV92YWx1ZS5nZXQoKS5pc0NlbGwoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3ZhbHVlKTsKK30KKworRXhj
ZXB0aW9uOjpFeGNlcHRpb24oVk0mIHZtLCBKU1ZhbHVlIHRocm93blZhbHVlKQorICAgIDogQmFz
ZSh2bSwgdm0uZXhjZXB0aW9uU3RydWN0dXJlLmdldCgpKQoreworICAgIG1fdmFsdWUuc2V0KHZt
LCB0aGlzLCB0aHJvd25WYWx1ZSk7CisKKyAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFj
ZTsKKyAgICB2bS5pbnRlcnByZXRlci0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlKTsKKyAgICBt
X3N0YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+KHN0YWNrVHJhY2UpOworfQorCitF
eGNlcHRpb246On5FeGNlcHRpb24oKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRXhjZXB0aW9uX2gKKyNkZWZpbmUgRXhjZXB0aW9uX2gKKworI2lu
Y2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgor
CituYW1lc3BhY2UgSlNDIHsKKyAgICAKK2NsYXNzIEV4Y2VwdGlvbiA6IHB1YmxpYyBKU09iamVj
dCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU09iamVjdCBCYXNlOworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpT
dHJ1Y3R1cmVGbGFnczsKKworICAgIHN0YXRpYyBFeGNlcHRpb24qIGNyZWF0ZShWTSYsIEpTVmFs
dWUgdGhyb3duVmFsdWUpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlv
biA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBwcm90b3R5cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIHN0YXRpYyBw
dHJkaWZmX3QgdmFsdWVPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihFeGNlcHRpb24sIG1fdmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBFeGNlcHRpb24q
IGNhc3QoSlNWYWx1ZSBleGNlcHRpb25Bc0pTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
anNDYXN0PEV4Y2VwdGlvbio+KGV4Y2VwdGlvbkFzSlNWYWx1ZS5hc0NlbGwoKSk7CisgICAgfQor
CisgICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KKyAg
ICBjb25zdCBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIHN0YWNrKCkgY29uc3QgeyByZXR1
cm4gbV9zdGFjazsgfQorCisgICAgYm9vbCBkaWROb3RpZnlJbnNwZWN0b3JPZlRocm93KCkgY29u
c3QgeyByZXR1cm4gbV9kaWROb3RpZnlJbnNwZWN0b3JPZlRocm93OyB9CisgICAgdm9pZCBzZXRE
aWROb3RpZnlJbnNwZWN0b3JPZlRocm93KCkgeyBtX2RpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3cg
PSB0cnVlOyB9CisKKyAgICB+RXhjZXB0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgRXhjZXB0aW9u
KFZNJiwgSlNWYWx1ZSB0aHJvd25WYWx1ZSk7CisKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4g
bV92YWx1ZTsKKyAgICBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4gbV9zdGFjazsKKyAgICBi
b29sIG1fZGlkTm90aWZ5SW5zcGVjdG9yT2ZUaHJvdyB7IGZhbHNlIH07CisKKyAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBFeGNlcHRpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCisjaW5jbHVk
ZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNp
bmNsdWRlICJKU05vdEFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTU5
LDE3ICs2MCwxMSBAQCBKU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwCiAg
ICAgcmV0dXJuIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKCp2bSk7CiB9CiAKLWJv
b2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTT2JqZWN0KiBvYmplY3QpCitib29s
IGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2VwdGlvbikKIHsK
LSAgICByZXR1cm4gb2JqZWN0LT5pbmhlcml0cyhUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6Omlu
Zm8oKSk7CisgICAgcmV0dXJuIGV4Y2VwdGlvbi0+dmFsdWUoKS5pbmhlcml0cyhUZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3I6OmluZm8oKSk7CiB9CiAKLWJvb2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9u
RXhjZXB0aW9uKEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKFRl
cm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6aW5mbygpKTsKLX0KLQotCiBKU09iamVjdCogY3JlYXRl
U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIk1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4
Y2VlZGVkLiIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bkhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb25IZWxwZXJzLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCAr
MzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHR5cGVkZWYgSlNPYmplY3QqICgqRXJyb3JGYWN0b3J5
KShFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRl
cik7CiAKIEpTT2JqZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKFZNKik7
Ci1ib29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU09iamVjdCopOwotSlNfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNWYWx1ZSk7
CitKU19FWFBPUlRfUFJJVkFURSBib29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihF
eGNlcHRpb24qKTsKIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVj
U3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBl
bmRlcik7CiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vy
cm9yKEV4ZWNTdGF0ZSopOwogSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3Io
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAKICNpbmNs
dWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CkBAIC03NSw3ICs3Niw3IEBAIEpTVmFsdWUgY2FsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmEKICAgICAvLyBGSVhNRTogU29tZSBjYWxsZXJzIG1heSBpbnZva2UgZ2V0KCkgd2l0aG91dCBj
aGVja2luZyBmb3IgYW4gZXhjZXB0aW9uIGZpcnN0LgogICAgIC8vIFdlIHdvcmsgYXJvdW5kIHRo
YXQgYnkgY2hlY2tpbmcgaGVyZS4KICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAg
ICAgIHJldHVybiBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2Vw
dGlvbigpLT52YWx1ZSgpOwogCiAgICAgSlNPYmplY3QqIGdldHRlciA9IGpzQ2FzdDxHZXR0ZXJT
ZXR0ZXIqPihnZXR0ZXJTZXR0ZXIpLT5nZXR0ZXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIEpTVmFsdWUgaXRlcmF0
b3JTdGVwKEV4ZWNTdGF0ZSogZXhlYywgSlMKIAogdm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvcikKIHsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAg
ICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IG51bGxwdHI7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSB7CiAgICAgICAgIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwpAQCAtOTksNyArOTksNyBAQCB2b2lkIGl0ZXJhdG9y
Q2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChy
ZXR1cm5GdW5jdGlvbi5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGlmICghZXhjZXB0aW9uLmlz
RW1wdHkoKSkKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgIGV4ZWMtPnZtKCku
dGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhCiAgICAgQ2FsbERhdGEgcmV0dXJuRnVuY3Rpb25DYWxsRGF0YTsKICAgICBDYWxsVHlwZSBy
ZXR1cm5GdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmV0dXJuRnVuY3Rpb24sIHJldHVy
bkZ1bmN0aW9uQ2FsbERhdGEpOwogICAgIGlmIChyZXR1cm5GdW5jdGlvbkNhbGxUeXBlID09IENh
bGxUeXBlTm9uZSkgewotICAgICAgICBpZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpCisgICAgICAg
IGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGV4Y2VwdGlvbik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMpOwpAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmEKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXR1cm5GdW5jdGlvbkFyZ3Vt
ZW50czsKICAgICBKU1ZhbHVlIGlubmVyUmVzdWx0ID0gY2FsbChleGVjLCByZXR1cm5GdW5jdGlv
biwgcmV0dXJuRnVuY3Rpb25DYWxsVHlwZSwgcmV0dXJuRnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0
b3IsIHJldHVybkZ1bmN0aW9uQXJndW1lbnRzKTsKIAotICAgIGlmICghZXhjZXB0aW9uLmlzRW1w
dHkoKSkgeworICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4
Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVy
LmgiCiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0
b3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAj
aW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVz
LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9taXNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKICNpbmNsdWRlICJFcnJv
ci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5s
aW5lcy5oIgpAQCAtMTM2LDcgKzEzNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnMKIAogICAgIC8vIDE0LiBJZiByZXN1bHQgaXMgYW4gYWJydXB0IGNvbXBsZXRp
b24sIGNhbGwgUHJvbWlzZVJlamVjdChwcm9taXNlLCByZXN1bHQuW1t2YWx1ZV1dKS4KICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBl
eGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNl
cHRpb24oKS0+dmFsdWUoKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAg
ICAgICBwcm9taXNlLT5yZWplY3Qodm0sIGV4Y2VwdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3BwCShyZXZpc2lv
biAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZl
cnJlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoUFJP
TUlTRVMpCiAKICNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTUHJvbWlzZS5oIgpAQCAtMTUwLDcgKzE1MSw3IEBAIFRoZW5hYmxlU3RhdHVz
IHVwZGF0ZURlZmVycmVkRnJvbVBvdGVudGkKICAgICAgICAgLy8gaS4gTGV0ICdyZWplY3RSZXN1
bHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9k
IG9mCiAgICAgICAgIC8vICAgIGRlZmVycmVkLltbUmVqZWN0XV0gd2l0aCB1bmRlZmluZWQgYXMg
dGhpc0FyZ3VtZW50IGFuZCBhIExpc3QgY29udGFpbmluZwogICAgICAgICAvLyAgICB0aGVuLltb
dmFsdWVdXSBhcyBhcmd1bWVudHNMaXN0LgotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4
ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2Vw
dGlvbigpLT52YWx1ZSgpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAg
ICAgIHBlcmZvcm1EZWZlcnJlZFJlamVjdChleGVjLCBkZWZlcnJlZCwgZXhjZXB0aW9uKTsKQEAg
LTE4NSw3ICsxODYsNyBAQCBUaGVuYWJsZVN0YXR1cyB1cGRhdGVEZWZlcnJlZEZyb21Qb3RlbnRp
CiAgICAgICAgIC8vIGkuIExldCAncmVqZWN0UmVzdWx0JyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxp
bmcgdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZgogICAgICAgICAvLyAgICBkZWZlcnJl
ZC5bW1JlamVjdF1dIHdpdGggdW5kZWZpbmVkIGFzIHRoaXNBcmd1bWVudCBhbmQgYSBMaXN0IGNv
bnRhaW5pbmcKICAgICAgICAgLy8gICAgdGhlbkNhbGxSZXN1bHQuW1t2YWx1ZV1dIGFzIGFyZ3Vt
ZW50c0xpc3QuCi0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7
CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7
CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgcGVyZm9ybURlZmVy
cmVkUmVqZWN0KGV4ZWMsIGRlZmVycmVkLCBleGNlcHRpb24pOwpAQCAtMjI4LDcgKzIyOSw3IEBA
IHZvaWQgcGVyZm9ybURlZmVycmVkUmVqZWN0KEV4ZWNTdGF0ZSogZXgKIEpTVmFsdWUgYWJydXB0
UmVqZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkKQog
ewogICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgSlNWYWx1ZSBhcmd1bWVu
dCA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgIEpTVmFsdWUgYXJndW1lbnQgPSBleGVjLT5leGNl
cHRpb24oKS0+dmFsdWUoKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgLy8g
aS4gTGV0ICdyZWplY3RSZXN1bHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxs
XV0gaW50ZXJuYWwgbWV0aG9kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb21pc2VSZWFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9taXNlUmVhY3Rpb24uY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VSZWFjdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKICNpbmNsdWRl
ICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCkBAIC04OCw3ICs4OSw3IEBAIHZvaWQgRXhlY3V0ZVByb21pc2VSZWFjdGlvbk1p
Y3JvdGFzazo6cnUKICAgICAvLyAgICBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YgZGVmZXJy
ZWQuW1tSZWplY3RdXSBwYXNzaW5nIHVuZGVmaW5lZCBhcyB0aGlzQXJndW1lbnQKICAgICAvLyAg
ICBhbmQgYSBMaXN0IGNvbnRhaW5pbmcgaGFuZGxlclJlc3VsdC5bW3ZhbHVlXV0gYXMgYXJndW1l
bnRzTGlzdC4KICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1
ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRp
b24gPSBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKIAogICAgICAgICBwZXJmb3JtRGVmZXJyZWRSZWplY3QoZXhlYywgZGVmZXJyZWQs
IGV4Y2VwdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZp
c2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgog
I2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkVycm9ySW5zdGFuY2UuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJG
dW5jdGlvbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCkBA
IC0yMzUsNiArMjM2LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBl
KQogICAgIHdlYWtNYXBEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgV2Vha01hcERhdGE6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFZhbHVlU3RydWN0
dXJlLnNldCgqdGhpcywgSW5mZXJyZWRWYWx1ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwogICAgIGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5j
dGlvblJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAg
ZXhjZXB0aW9uU3RydWN0dXJlLnNldCgqdGhpcywgRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAjaWYgRU5BQkxFKFBST01JU0VTKQogICAgIHByb21pc2VE
ZWZlcnJlZFN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvbWlzZVJlYWN0aW9uU3RydWN0dXJl
LnNldCgqdGhpcywgSlNQcm9taXNlUmVhY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKQEAgLTU0NSw3ICs1NDcsNyBAQCB2b2lkIFZNOjpyZWxlYXNlRXhlY3V0YWJs
ZU1lbW9yeSgpCiAgICAgaGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQogCi1KU1ZhbHVlIFZN
Ojp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXJyb3IpCit2b2lkIFZN
Ojp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQog
ewogICAgIGlmIChPcHRpb25zOjpicmVha09uVGhyb3coKSkgewogICAgICAgICBkYXRhTG9nKCJJ
biBjYWxsIGZyYW1lICIsIFJhd1BvaW50ZXIoZXhlYyksICIgZm9yIGNvZGUgYmxvY2sgIiwgKmV4
ZWMtPmNvZGVCbG9jaygpLCAiXG4iKTsKQEAgLTU1MywzNyArNTU1LDI0IEBAIEpTVmFsdWUgVk06
OnRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXgKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGV4
ZWMgPT0gdG9wQ2FsbEZyYW1lIHx8IGV4ZWMgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCkgfHwgZXhlYyA9PSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKSk7Ci0gICAgCi0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Ci0g
ICAgaW50ZXJwcmV0ZXItPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7Ci0gICAgbV9leGNlcHRp
b25TdGFjayA9IFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPihzdGFja1RyYWNlKTsKLSAgICBt
X2V4Y2VwdGlvbiA9IGVycm9yOwotCi0gICAgcmV0dXJuIGVycm9yOwotfQotICAgIAotSlNPYmpl
Y3QqIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBlcnJvcikK
LXsKLSAgICByZXR1cm4gYXNPYmplY3QodGhyb3dFeGNlcHRpb24oZXhlYywgSlNWYWx1ZShlcnJv
cikpKTsKLX0KLXZvaWQgVk06OmdldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBS
ZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKQotewotICAgIGV4Y2Vw
dGlvbiA9IG1fZXhjZXB0aW9uOwotICAgIGV4Y2VwdGlvblN0YWNrID0gbV9leGNlcHRpb25TdGFj
azsKLX0KLXZvaWQgVk06OnNldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZD
b3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKQotewotICAgIG1fZXhjZXB0
aW9uID0gZXhjZXB0aW9uOwotICAgIG1fZXhjZXB0aW9uU3RhY2sgPSBleGNlcHRpb25TdGFjazsK
KyAgICBzZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKIH0KIAotdm9pZCBWTTo6Y2xlYXJFeGNlcHRp
b24oKQorSlNWYWx1ZSBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHRocm93blZhbHVlKQogewotICAgIG1fZXhjZXB0aW9uID0gSlNWYWx1ZSgpOworICAgIEV4Y2Vw
dGlvbiogZXhjZXB0aW9uOworICAgIGlmICh0aHJvd25WYWx1ZS5pc0NlbGwoKSAmJiB0aHJvd25W
YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gZXhjZXB0aW9uU3RydWN0dXJlLmdldCgpKQor
ICAgICAgICBleGNlcHRpb24gPSBqc0Nhc3Q8RXhjZXB0aW9uKj4odGhyb3duVmFsdWUuYXNDZWxs
KCkpOworICAgIGVsc2UKKyAgICAgICAgZXhjZXB0aW9uID0gRXhjZXB0aW9uOjpjcmVhdGUoKnRo
aXMsIHRocm93blZhbHVlKTsKKworICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7
CisgICAgcmV0dXJuIEpTVmFsdWUoZXhjZXB0aW9uKTsKIH0KLXZvaWQgVk06OiBjbGVhckV4Y2Vw
dGlvblN0YWNrKCkKKworSlNPYmplY3QqIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBlcnJvcikKIHsKLSAgICBtX2V4Y2VwdGlvblN0YWNrID0gUmVmQ291bnRl
ZEFycmF5PFN0YWNrRnJhbWU+KCk7CisgICAgcmV0dXJuIGFzT2JqZWN0KHRocm93RXhjZXB0aW9u
KGV4ZWMsIEpTVmFsdWUoZXJyb3IpKSk7CiB9CiAKIHZvaWQgVk06OnNldFN0YWNrUG9pbnRlckF0
Vk1FbnRyeSh2b2lkKiBzcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29y
a2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4K
ICNpbmNsdWRlIDx3dGYvU3RhY2tCb3VuZHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KQEAgLTc4LDYgKzc3LDcgQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29k
ZUNhY2hlOwogY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CiBjbGFzcyBFeGVjU3RhdGU7CitjbGFz
cyBFeGNlcHRpb247CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIFR5cGVQcm9maWxlcjsKIGNs
YXNzIFR5cGVQcm9maWxlckxvZzsKQEAgLTI3NCw2ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlv
blJhcmVEYXRhU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV4Y2VwdGlvblN0cnVj
dHVyZTsKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlz
ZURlZmVycmVkU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VSZWFjdGlv
blN0cnVjdHVyZTsKQEAgLTM3MiwxNCArMzczLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihWTSwgdGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwogICAgIH0KIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xlYXJFeGNlcHRpb24oKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGNsZWFyRXhjZXB0aW9uU3RhY2soKTsKLSAgICB2b2lkIGdldEV4Y2Vw
dGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4m
IGV4Y2VwdGlvblN0YWNrKTsKLSAgICB2b2lkIHNldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhj
ZXB0aW9uLCBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKTsKLSAg
ICBKU1ZhbHVlIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9Ci0gICAg
SlNWYWx1ZSogYWRkcmVzc09mRXhjZXB0aW9uKCkgeyByZXR1cm4gJm1fZXhjZXB0aW9uOyB9Ci0g
ICAgY29uc3QgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+JiBleGNlcHRpb25TdGFjaygpIGNv
bnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uU3RhY2s7IH0KKyAgICB2b2lkIGNsZWFyRXhjZXB0aW9u
KCkgeyBtX2V4Y2VwdGlvbiA9IG51bGxwdHI7IH0KKyAgICB2b2lkIHNldEV4Y2VwdGlvbihFeGNl
cHRpb24qIGV4Y2VwdGlvbikgeyBtX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsgfQogCisgICAgRXhj
ZXB0aW9uKiBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbjsgfQorICAgIEpT
Q2VsbCoqIGFkZHJlc3NPZkV4Y2VwdGlvbigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlND
ZWxsKio+KCZtX2V4Y2VwdGlvbik7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhy
b3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgRXhjZXB0aW9uKik7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBKU09iamVjdCogdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqKTsKIApAQCAtNTY5LDEyICs1NjksMTEgQEAgcHJpdmF0ZToKICNlbmRpZgogI2VuZGlmCiAg
ICAgdm9pZCogbV9sYXN0U3RhY2tUb3A7Ci0gICAgSlNWYWx1ZSBtX2V4Y2VwdGlvbjsKKyAgICBF
eGNlcHRpb24qIG1fZXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9pbkRlZmluZU93
blByb3BlcnR5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb2RlQ2FjaGU+IG1fY29kZUNhY2hlOwog
ICAgIExlZ2FjeVByb2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxlcjsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8QnVpbHRpbkV4ZWN1dGFibGVzPiBtX2J1aWx0aW5FeGVjdXRhYmxlczsKLSAgICBSZWZDb3Vu
dGVkQXJyYXk8U3RhY2tGcmFtZT4gbV9leGNlcHRpb25TdGFjazsKICAgICBIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPFdhdGNocG9pbnRTZXQ+PiBtX2ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludFNldHM7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVQcm9maWxlcj4gbV90eXBlUHJvZmlsZXI7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPFR5cGVQcm9maWxlckxvZz4gbV90eXBlUHJvZmlsZXJMb2c7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHJl
dmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlT
Y29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDYgQEAgVk1FbnRyeVNjb3BlOjpW
TUVudHJ5U2NvcGUoVk0mIHZtLCBKU0dsbwogICAgICAgICAvLyBvYnNlcnZlIHRpbWUgeG9uZSBj
aGFuZ2VzLgogICAgICAgICB2bS5yZXNldERhdGVDYWNoZSgpOwogICAgIH0KLQotICAgIC8vIENs
ZWFyIHRoZSBjYXB0dXJlZCBleGNlcHRpb24gc3RhY2sgYmV0d2VlbiBlbnRyaWVzCi0gICAgdm0u
Y2xlYXJFeGNlcHRpb25TdGFjaygpOwogfQogCiB2b2lkIFZNRW50cnlTY29wZTo6c2V0RW50cnlT
Y29wZURpZFBvcExpc3RlbmVyKHZvaWQqIGtleSwgRW50cnlTY29wZURpZFBvcExpc3RlbmVyIGxp
c3RlbmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9F
eGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9ydW50aW1lL0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9FeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfRXhjZXB0aW9uX2gKKyNkZWZpbmUgV2ViQ29y
ZV9GV0RfRXhjZXB0aW9uX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9FeGNlcHRpb24uaD4K
KyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tE
YXRhLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDYWxsYmFja0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMCArNzMsMTAgQEAgSlNW
YWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSgogCiAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1
bWVudEZ1bmN0aW9uQ2FsbChjb250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwogCi0gICAgSlNW
YWx1ZSBleGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBjb250ZXh0LT5pc0RvY3VtZW50KCkKLSAgICAgICAgPyBKU01haW5UaHJlYWRFeGVj
U3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVl
LCBhcmdzLCAmZXhjZXB0aW9uKQotICAgICAgICA6IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsICZleGNlcHRpb24pOworICAgICAg
ICA/IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIGV4Y2VwdGlvbikKKyAgICAgICAgOiBKU0M6OmNh
bGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBl
eGNlcHRpb24pOwogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rp
b24oY29va2llLCBjb250ZXh0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw4ICs5Myw4IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRo
TlNSZXNvbHZlcjo6bG9va3VwTmEKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAg
IGFyZ3MuYXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHByZWZpeCkpOwogCi0gICAgSlNW
YWx1ZSBleGNlcHRpb247Ci0gICAgSlNWYWx1ZSByZXR2YWwgPSBKU01haW5UaHJlYWRFeGVjU3Rh
dGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV9jdXN0b21SZXNv
bHZlci5nZXQoKSwgYXJncywgJmV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247
CisgICAgSlNWYWx1ZSByZXR2YWwgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywg
ZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV9jdXN0b21SZXNvbHZlci5nZXQoKSwgYXJn
cywgZXhjZXB0aW9uKTsKIAogICAgIFN0cmluZyByZXN1bHQ7CiAgICAgaWYgKGV4Y2VwdGlvbikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUv
RGF0ZUluc3RhbmNlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvRXJyb3JIYW5kbGluZ1Njb3BlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24u
aD4KICNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRlIDxydW50
aW1lL0pTRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTEzOCw3ICsxMzksNyBA
QCBKU0M6OkpTVmFsdWUganNBcnJheShKU0M6OkV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIEpT
Qzo6Y29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0LCBsaXN0KTsKIH0KIAotdm9p
ZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2Fj
aGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdB
UElMb2NrKCkpOwogICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXhjZXB0
aW9uKSkKQEAgLTE0OCw3ICsxNDksNiBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTCiAKICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRl
U2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxT
dGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSkpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7Ci0gICAgZXhlYy0+Y2xlYXJTdXBwbGVtZW50YXJ5RXhjZXB0aW9uSW5mbygpOwogCiAg
ICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgaWYgKEpTRE9NV2luZG93
KiB3aW5kb3cgPSBqc0R5bmFtaWNDYXN0PEpTRE9NV2luZG93Kj4oZ2xvYmFsT2JqZWN0KSkgewpA
QCAtMTY2LDE0ICsxNjYsMTMgQEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVj
LCBKUwogICAgIH0KIAogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKEV4Y2VwdGlv
bkJhc2UqIGV4Y2VwdGlvbkJhc2UgPSB0b0V4Y2VwdGlvbkJhc2UoZXhjZXB0aW9uKSkKKyAgICBp
ZiAoRXhjZXB0aW9uQmFzZSogZXhjZXB0aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFzZShleGNlcHRp
b24tPnZhbHVlKCkpKQogICAgICAgICBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb25CYXNlLT5tZXNz
YWdlKCkgKyAiOiAiICArIGV4Y2VwdGlvbkJhc2UtPmRlc2NyaXB0aW9uKCk7CiAgICAgZWxzZSB7
CiAgICAgICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNw
ZWN0b3I6IFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbiBzaG91bGQgbm90IGV2YWx1YXRlIEphdmFT
Y3JpcHQgaGFuZGxpbmcgZXhjZXB0aW9ucwogICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY3VzdG9u
IGV4Y2VwdGlvbiBvYmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5IGFuZCBnZXQgYSBu
aWNlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4KLSAgICAgICAgZXJy
b3JNZXNzYWdlID0gZXhjZXB0aW9uLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAg
ICAgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgZXhlYy0+
Y2xlYXJTdXBwbGVtZW50YXJ5RXhjZXB0aW9uSW5mbygpOwogICAgIH0KIAogICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKQEAgLTE4Miw3ICsxODEsNyBAQCB2b2lkIHJlcG9ydEV4
Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKIHZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlv
bihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNl
cHRpb24oKTsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwog
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4
Y2VwdGlvbik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRp
bmcuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Nyw3ICsyNDcsNyBAQCB2b2lkIGFkZElt
cHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluCiAKIGNvbnN0IEpTQzo6SGFzaFRhYmxlJiBn
ZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSYg
c3RhdGljVGFibGUpOwogCi1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogPSBudWxs
cHRyKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFeGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7CiB2b2lkIHJlcG9y
dEN1cnJlbnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKIAogSlNDOjpKU1ZhbHVlIGNyZWF0
ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAkocmV2aXNpb24g
MTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05OCwxMCArOTgsMTAgQEAgdm9pZCBKU0Vycm9ySGFuZGxlcjo6
aGFuZGxlRXZlbnQoU2NyaXB0RQogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCB2bS5lbnRyeVNjb3BlID8gdm0u
ZW50cnlTY29wZS0+Z2xvYmFsT2JqZWN0KCkgOiBnbG9iYWxPYmplY3QpOwogCi0gICAgICAgIEpT
VmFsdWUgZXhjZXB0aW9uOworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICAgICAg
SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQo
KQotICAgICAgICAgICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywganNGdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ3MsICZleGNlcHRpb24p
Ci0gICAgICAgICAgICA6IEpTQzo6Y2FsbChleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGdsb2JhbE9iamVjdCwgYXJncywgJmV4Y2VwdGlvbik7CisgICAgICAgICAgICA/IEpT
TWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGdsb2JhbE9iamVjdCwgYXJncywgZXhjZXB0aW9uKQorICAgICAgICAgICAgOiBKU0M6
OmNhbGwoZXhlYywganNGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3Qs
IGFyZ3MsIGV4Y2VwdGlvbik7CiAKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRDdXJyZW50RXZl
bnQoc2F2ZWRFdmVudCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDEw
ICsxMjQsMTAgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAg
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSlNNYWluVGhyZWFk
RXhlY1N0YXRlOjppbnN0cnVtZW50RnVuY3Rpb25DYWxsKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IGNhbGxUeXBlLCBjYWxsRGF0YSk7CiAKICAgICAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBoYW5k
bGVFdmVudEZ1bmN0aW9uID09IGpzRnVuY3Rpb24gPyB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
ZXZlbnQtPmN1cnJlbnRUYXJnZXQoKSkgOiBqc0Z1bmN0aW9uOwotICAgICAgICBKU1ZhbHVlIGV4
Y2VwdGlvbjsKKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgICAgIEpTVmFsdWUg
cmV0dmFsID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpCi0gICAgICAgICAg
ICA/IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgJmV4Y2VwdGlvbikKLSAgICAg
ICAgICAgIDogSlNDOjpjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgICAgID8gSlNN
YWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNhbGxU
eXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pCisgICAgICAgICAgICA6
IEpTQzo6Y2FsbChleGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEs
IHRoaXNWYWx1ZSwgYXJncywgZXhjZXB0aW9uKTsKIAogICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihjb29raWUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3Rh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDE4ICs0NiwxOCBAQCB2b2lkIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZGlkTGVhdmVTY3JpCiAg
ICAgTXV0YXRpb25PYnNlcnZlcjo6ZGVsaXZlckFsbE11dGF0aW9ucygpOwogfQogCi1KU0M6OkpT
VmFsdWUgZnVuY3Rpb25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwg
Y29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNv
bnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCitKU0M6OkpT
VmFsdWUgZnVuY3Rpb25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwg
Y29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNv
bnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlv
bikKIHsKICAgICBpZiAoaXNNYWluVGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBKU01haW5UaHJl
YWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0
YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pOwotICAgIHJldHVybiBKU0M6OmNhbGwoZXhl
YywgZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBl
eGNlcHRpb24pOworICAgICAgICByZXR1cm4gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4
ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywg
cmV0dXJuZWRFeGNlcHRpb24pOworICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb25P
YmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCByZXR1cm5lZEV4Y2Vw
dGlvbik7CiB9CiAKLUpTQzo6SlNWYWx1ZSBldmFsdWF0ZUhhbmRsZXJGcm9tQW55VGhyZWFkKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpK
U1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCitKU0M6OkpTVmFsdWUg
ZXZhbHVhdGVIYW5kbGVyRnJvbUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RXhj
ZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgaWYgKGlzTWFpblRocmVhZCgpKQot
ICAgICAgICByZXR1cm4gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBzb3Vy
Y2UsIHRoaXNWYWx1ZSwgZXhjZXB0aW9uKTsKLSAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVj
LCBzb3VyY2UsIHRoaXNWYWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIHJldHVybmVk
RXhjZXB0aW9uKTsKKyAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNW
YWx1ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVj
U3RhdGUuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE2ICs1MCwyMiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzX21haW5UaHJlYWRTdGF0ZTsKICAgICB9OwogICAg
IAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY2FsbChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlND
OjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBK
U0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlND
OjpBcmdMaXN0JiBhcmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbikKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNhbGwoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlv
bk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2Fs
bERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywg
SlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbikKICAgICB7CiAgICAgICAgIEpTTWFp
blRocmVhZEV4ZWNTdGF0ZSBjdXJyZW50U3RhdGUoZXhlYyk7Ci0gICAgICAgIHJldHVybiBKU0M6
OmNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVl
LCBhcmdzLCBleGNlcHRpb24pOworICAgICAgICByZXR1cm4gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0
aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgcmV0dXJuZWRF
eGNlcHRpb24pOwogICAgIH07CiAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpK
U1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3Vy
Y2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYg
cmV0dXJuZWRFeGNlcHRpb24pCiAgICAgewogICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGUg
Y3VycmVudFN0YXRlKGV4ZWMpOwotICAgICAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBz
b3VyY2UsIHRoaXNWYWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6ZXZhbHVh
dGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICB9Owor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUgPSBK
U0M6OkpTVmFsdWUoKSkKKyAgICB7CisgICAgICAgIEpTQzo6RXhjZXB0aW9uKiB1bnVzZWQ7Cisg
ICAgICAgIHJldHVybiBldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1ZSwgdW51c2VkKTsK
ICAgICB9OwogCiAgICAgc3RhdGljIHZvaWQgcnVuVGFzayhKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNDOjpNaWNyb3Rhc2smIHRhc2spCkBAIC0xMjEsOCArMTI3LDggQEAgcHJpdmF0ZToKICAgICBK
U0M6OkV4ZWNTdGF0ZSogbV9wcmV2aW91c1N0YXRlOwogfTsKIAotSlNDOjpKU1ZhbHVlIGZ1bmN0
aW9uQ2FsbEhhbmRsZXJGcm9tQW55VGhyZWFkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
IGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiwgSlND
OjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkpTVmFs
dWUqIGV4Y2VwdGlvbik7Ci1KU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5kbGVyRnJvbUFueVRocmVh
ZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIEpTQzo6SlNWYWx1ZSB0
aGlzVmFsdWUsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKTsKK0pTQzo6SlNWYWx1ZSBmdW5jdGlv
bkNhbGxIYW5kbGVyRnJvbUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBm
dW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYsIEpTQzo6
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpFeGNlcHRp
b24qJiByZXR1cm5lZEV4Y2VwdGlvbik7CitKU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5kbGVyRnJv
bUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIEpTQzo6
SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pOwog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTXV0YXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODcsOCArODcsOCBAQCB2b2lkIEpTTXV0YXRpb25DYWxsYmFjazo6Y2FsbChj
b25zdCBWZWN0CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0g
SlNNYWluVGhyZWFkRXhlY1N0YXRlOjppbnN0cnVtZW50RnVuY3Rpb25DYWxsKGNvbnRleHQsIGNh
bGxUeXBlLCBjYWxsRGF0YSk7CiAKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICBKU01haW5U
aHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgY2FsbGJhY2ssIGNhbGxUeXBlLCBjYWxsRGF0YSwg
anNPYnNlcnZlciwgYXJncywgJmV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247
CisgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGNhbGxiYWNrLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGpzT2JzZXJ2ZXIsIGFyZ3MsIGV4Y2VwdGlvbik7CiAKICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihjb29raWUsIGNvbnRleHQpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZUpTU3RyZWFtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZUpTU3RyZWFtLmNw
cAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFi
bGVKU1N0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGdldFByb3BlcnR5RnJvbU9iagogICAgIHJldHVybiBvYmplY3QtPmdldChl
eGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGlkZW50aWZpZXIpKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGNhbGxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
anNGdW5jdGlvbiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cywg
SlNWYWx1ZSogZXhjZXB0aW9uKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGNhbGxGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUganNGdW5jdGlvbiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3VtZW50cywgRXhjZXB0aW9uKiYgZXhjZXB0aW9uKQogewogICAgIENh
bGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoanNG
dW5jdGlvbiwgY2FsbERhdGEpOwpAQCAtMTAwLDggKzEwMCw4IEBAIHZvaWQgUmVhZGFibGVKU1N0
cmVhbTo6U291cmNlOjpzdGFydChFeGUKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVu
dHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZChyZWFkYWJsZVN0cmVhbS5qc0NvbnRyb2xsZXIoZXhl
YywgZ2xvYmFsT2JqZWN0KCkpKTsKIAotICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgIGNhbGxG
dW5jdGlvbigmZXhlYywgc3RhcnRGdW5jdGlvbiwgbV9zb3VyY2UuZ2V0KCksIGFyZ3VtZW50cywg
JmV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CisgICAgY2FsbEZ1bmN0aW9u
KCZleGVjLCBzdGFydEZ1bmN0aW9uLCBtX3NvdXJjZS5nZXQoKSwgYXJndW1lbnRzLCBleGNlcHRp
b24pOwogCiAgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAgICB0aHJvd1ZNRXJyb3IoJmV4ZWMs
IGV4Y2VwdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRB
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVk
dWxlZEFjdGlvbi5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDExICs5OSwx
MSBAQCB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZUZ1bmN0aW9uSW5DCiAKICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSlNNYWluVGhyZWFkRXhlY1N0YXRl
OjppbnN0cnVtZW50RnVuY3Rpb25DYWxsKCZjb250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwog
Ci0gICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAg
aWYgKGlzPERvY3VtZW50Pihjb250ZXh0KSkKLSAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRl
OjpjYWxsKGV4ZWMsIG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1Zh
bHVlLCBhcmdzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpj
YWxsKGV4ZWMsIG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVl
LCBhcmdzLCBleGNlcHRpb24pOwogICAgIGVsc2UKLSAgICAgICAgSlNDOjpjYWxsKGV4ZWMsIG1f
ZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCAmZXhj
ZXB0aW9uKTsKKyAgICAgICAgSlNDOjpjYWxsKGV4ZWMsIG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxU
eXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pOwogCiAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCAmY29udGV4dCk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIu
Y3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDkgKzE2MCw4IEBAIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXIKIAogICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxF
dmFsdWF0ZVNjcmlwdChtX2ZyYW1lLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuc3RhcnRMaW5lKCkp
OwogCi0gICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotCi0gICAgSlNWYWx1ZSByZXR1
cm5WYWx1ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywganNTb3VyY2VD
b2RlLCBzaGVsbCwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEV4Y2VwdGlvbiogZXZhbHVh
dGlvbkV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhl
Y1N0YXRlOjpldmFsdWF0ZShleGVjLCBqc1NvdXJjZUNvZGUsIHNoZWxsLCBldmFsdWF0aW9uRXhj
ZXB0aW9uKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRXZhbHVhdGVTY3Jp
cHQoY29va2llLCBtX2ZyYW1lKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAxODUxMTApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSA8cnVudGltZS9Cb29sZWFu
T2JqZWN0Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KICNpbmNsdWRl
IDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlC
dWZmZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg+CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcg
QEAKICNpbmNsdWRlIDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KICNpbmNsdWRlIDxpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNM
b2NrLmg+CkBAIC05OCwxNSArOTksMTUgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpl
dmFsdWF0ZShjbwogICAgIGlmIChpc0V4ZWN1dGlvbkZvcmJpZGRlbigpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBleGNlcHRpb247Ci0gICAgZXZhbHVh
dGUoc291cmNlQ29kZSwgJmV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbi5qc1ZhbHVlKCkp
IHsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKKyAgICBldmFsdWF0ZShzb3VyY2VDb2RlLCBl
eGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0oKSk7Ci0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihtX3dvcmtlckdsb2JhbFNjb3BlV3Jh
cHBlci0+Z2xvYmFsRXhlYygpLCBleGNlcHRpb24uanNWYWx1ZSgpKTsKKyAgICAgICAgcmVwb3J0
RXhjZXB0aW9uKG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCksIGV4Y2Vw
dGlvbik7CiAgICAgfQogfQogCi12b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRl
KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlKiBleGNlcHRpb24pCit2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNv
bnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJu
ZWRFeGNlcHRpb24pCiB7CiAgICAgaWYgKGlzRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTExNiw4ICsxMTcsOCBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
OmV2YWx1YXRlKGNvCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV93b3JrZXJHbG9iYWxTY29wZVdy
YXBwZXItPmdsb2JhbEV4ZWMoKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAotICAg
IEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKLSAgICBKU0M6OmV2YWx1YXRlKGV4ZWMsIHNv
dXJjZUNvZGUuanNTb3VyY2VDb2RlKCksIG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9i
YWxUaGlzKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBKU0M6OkV4Y2VwdGlvbiogZXZh
bHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU0M6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZUNvZGUuanNT
b3VyY2VDb2RlKCksIG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxUaGlzKCksIGV2
YWx1YXRpb25FeGNlcHRpb24pOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBpZiAo
KGV2YWx1YXRpb25FeGNlcHRpb24gJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV2
YWx1YXRpb25FeGNlcHRpb24pKSAKQEAgLTEzMSwxNiArMTMyLDE5IEBAIHZvaWQgV29ya2VyU2Ny
aXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwog
ICAgICAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKICAgICAgICAgU3RyaW5nIHNvdXJjZVVSTCA9
IHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCk7Ci0gICAgICAgIGlmIChtX3dvcmtlckdsb2JhbFNj
b3BlLT5zYW5pdGl6ZVNjcmlwdEVycm9yKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1u
TnVtYmVyLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuY2FjaGVkU2NyaXB0KCkpKQotICAgICAgICAg
ICAgKmV4Y2VwdGlvbiA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCptX3ZtLCBleGVjLT52bSgp
LnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZS5pbXBs
KCkpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSgqbV92bSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgICAgIGlmICht
X3dvcmtlckdsb2JhbFNjb3BlLT5zYW5pdGl6ZVNjcmlwdEVycm9yKGVycm9yTWVzc2FnZSwgbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuY2FjaGVkU2NyaXB0
KCkpKSB7CisgICAgICAgICAgICB2bS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVFcnJvcihl
eGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSk7CisgICAgICAgICAgICBldmFsdWF0aW9uRXhjZXB0
aW9uID0gdm0uZXhjZXB0aW9uKCk7CisgICAgICAgICAgICB2bS5jbGVhckV4Y2VwdGlvbigpOwor
ICAgICAgICB9CiAgICAgfQorICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXZhbHVhdGlvbkV4Y2Vw
dGlvbjsKIH0KIAotdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzZXRFeGNlcHRpb24oY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGV4Y2VwdGlvbikKK3ZvaWQgV29ya2VyU2NyaXB0
Q29udHJvbGxlcjo6c2V0RXhjZXB0aW9uKEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24pCiB7Ci0g
ICAgbV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbEV4ZWMoKS0+dm0oKS50aHJvd0V4
Y2VwdGlvbihtX3dvcmtlckdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsRXhlYygpLCBleGNlcHRp
b24uanNWYWx1ZSgpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2VyR2xvYmFs
U2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCk7CisgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBleGNlcHRpb24pOwogfQogCiB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNj
aGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24oKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MCw5ICs2MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgfQogCiAgICAgICAgIHZvaWQgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYp
OwotICAgICAgICB2b2lkIGV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmLCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSogZXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBldmFsdWF0ZShjb25z
dCBTY3JpcHRTb3VyY2VDb2RlJiwgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbik7
CiAKLSAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmKTsKKyAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oSlNDOjpFeGNlcHRpb24qKTsKIAogICAg
ICAgICAvLyBBc3luYyByZXF1ZXN0IHRvIHRlcm1pbmF0ZSBhIEpTIHJ1biBleGVjdXRpb24uIEV2
ZW50dWFsbHkgY2F1c2VzIHRlcm1pbmF0aW9uCiAgICAgICAgIC8vIGV4Y2VwdGlvbiByYWlzZWQg
ZHVyaW5nIEpTIGV4ZWN1dGlvbiwgaWYgdGhlIHdvcmtlciB0aHJlYWQgaGFwcGVucyB0byBydW4g
SlMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1Nl
cnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2Vy
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cnVuRXZlbnRM
bwogICAgIH0gd2hpbGUgKHJlc3VsdCAhPSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkICYmICFtX2Rv
bmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMpOwogfQogCi12b2lkIFdvcmtlclNjcmlwdERlYnVn
U2VydmVyOjpyZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSBleGNlcHRpb24pIGNvbnN0Cit2b2lkIFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjpyZXBvcnRF
eGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24p
IGNvbnN0CiB7CiAgICAgV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1Nl
cnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNj
cmlwdERlYnVnU2VydmVyLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoSlNDOjpK
U0dsb2JhbE9iamVjdCopIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBydW5FdmVudExv
b3BXaGlsZVBhdXNlZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRTY3Jp
cHQoSlNDOjpFeGVjU3RhdGUqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiopIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgV29y
a2VyR2xvYmFsU2NvcGUqIG1fd29ya2VyR2xvYmFsU2NvcGU7CiAgICAgTGlzdGVuZXJTZXQgbV9s
aXN0ZW5lcnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9i
amVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNj
cmlwdE9iamVjdC5tbQkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEs
NyBAQCBpZCBjcmVhdGVKU1dyYXBwZXIoSlNDOjpKU09iamVjdCogb2JqZWN0CiAgICAgcmV0dXJu
IFtbW1dlYlNjcmlwdE9iamVjdCBhbGxvY10gX2luaXRXaXRoSlNPYmplY3Q6b2JqZWN0IG9yaWdp
blJvb3RPYmplY3Q6b3JpZ2luIHJvb3RPYmplY3Q6cm9vdF0gYXV0b3JlbGVhc2VdOwogfQogCi1z
dGF0aWMgdm9pZCBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoRXhlY1N0YXRlKiBleGVjLCBKU0M6OkpT
VmFsdWUmIGV4Y2VwdGlvbikKK3N0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShFeGVj
U3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAgICAgSlNET01XaW5k
b3cqIHdpbmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpKTsK
ICAgICBpZiAoIXdpbmRvdyB8fCAhZXhjZXB0aW9uKQpAQCAtMTMxLDcgKzEzMSw3IEBAIHN0YXRp
YyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShFeGVjU3QKIAogc3RhdGljIHZvaWQgYWRkRXhj
ZXB0aW9uVG9Db25zb2xlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0M6OkpTVmFsdWUgZXhj
ZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlv
biA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
YWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CkBAIC0zNDIsOCArMzQy
LDggQEAgLSAoaWQpY2FsbFdlYlNjcmlwdE1ldGhvZDooTlNTdHJpbmcgKiluYQogICAgIGlmICgh
W3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBKU0M6OkpT
VmFsdWUgZXhjZXB0aW9uOwotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBKU01haW5UaHJlYWRF
eGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgW3NlbGYg
X2ltcF0sIGFyZ0xpc3QsICZleGNlcHRpb24pOworICAgIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRp
b247CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2Fs
bChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBbc2VsZiBfaW1wXSwgYXJnTGlz
dCwgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgYWRkRXhjZXB0
aW9uVG9Db25zb2xlKGV4ZWMsIGV4Y2VwdGlvbik7CkBAIC0zNjYsNyArMzY2LDcgQEAgLSAoaWQp
ZXZhbHVhdGVXZWJTY3JpcHQ6KE5TU3RyaW5nICopc2NyaQogCiAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgCi0gICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhy
ZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQpKSwg
SlNDOjpKU1ZhbHVlKCksIDApOworICAgIEpTQzo6SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFp
blRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywgbWFrZVNvdXJjZShTdHJpbmcoc2NyaXB0
KSksIEpTQzo6SlNWYWx1ZSgpKTsKIAogICAgIGlkIHJlc3VsdE9iaiA9IFtXZWJTY3JpcHRPYmpl
Y3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJldHVyblZhbHVlIG9yaWdpblJvb3RPYmplY3Q6
W3NlbGYgX29yaWdpblJvb3RPYmplY3RdIHJvb3RPYmplY3Q6W3NlbGYgX3Jvb3RPYmplY3RdXTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcg
KzEzNyw3IEBAIGJvb2wgUGFnZVNjcmlwdERlYnVnU2VydmVyOjppc0NvbnRlbnRTY3IKICAgICBy
ZXR1cm4gJmN1cnJlbnRXb3JsZChleGVjKSAhPSAmbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7CiB9
CiAKLXZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvbikgY29uc3QKK3ZvaWQgUGFnZVNjcmlwdERlYnVnU2Vy
dmVyOjpyZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlv
bikgY29uc3QKIHsKICAgICBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlwdERl
YnVnU2VydmVyLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJ1bkV2ZW50TG9vcFdoaWxlUGF1c2Vk
KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudFNjcmlwdChKU0M6OkV4ZWNT
dGF0ZSopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiop
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBydW5FdmVudExvb3BXaGlsZVBhdXNlZEludGVy
bmFsKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2Nv
cGUuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDkgKzE5Nyw5IEBAIHZvaWQg
V29ya2VyR2xvYmFsU2NvcGU6OmltcG9ydFNjcmlwdHMoY28KIAogICAgICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnNjcmlwdEltcG9ydGVkKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwg
c2NyaXB0TG9hZGVyLT5pZGVudGlmaWVyKCksIHNjcmlwdExvYWRlci0+c2NyaXB0KCkpOwogCi0g
ICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGV4Y2VwdGlvbjsKLSAgICAgICAgbV9zY3Jp
cHQtPmV2YWx1YXRlKFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSwgc2Ny
aXB0TG9hZGVyLT5yZXNwb25zZVVSTCgpKSwgJmV4Y2VwdGlvbik7Ci0gICAgICAgIGlmICghZXhj
ZXB0aW9uLmhhc05vVmFsdWUoKSkgeworICAgICAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9u
OworICAgICAgICBtX3NjcmlwdC0+ZXZhbHVhdGUoU2NyaXB0U291cmNlQ29kZShzY3JpcHRMb2Fk
ZXItPnNjcmlwdCgpLCBzY3JpcHRMb2FkZXItPnJlc3BvbnNlVVJMKCkpLCBleGNlcHRpb24pOwor
ICAgICAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAgICAgICAgICBtX3NjcmlwdC0+c2V0RXhjZXB0
aW9uKGV4Y2VwdGlvbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0V4Y2VwdGlv
bi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvQXBwbGljYXRpb25DYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UuaD4KQEAgLTUyMiw3ICs1MjMsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXBv
cnRFeGNlcHRpb24oSlNDCiAgICAgaWYgKCF0b0pTRE9NV2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViQ29yZTo6cmVwb3J0
RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgdG9KUyhleGVjU3RhdGUsIGV4Y2VwdGlvbikpOworICAgIFdl
YkNvcmU6OnJlcG9ydEV4Y2VwdGlvbihleGVjU3RhdGUsIEV4Y2VwdGlvbjo6Y2FzdCh0b0pTKGV4
ZWNTdGF0ZSwgZXhjZXB0aW9uKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRDcmVh
dGVQYWdlKFdlYlBhZ2UqIHBhZ2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsNyBAQAogI2ltcG9ydCA8Q29yZUZv
dW5kYXRpb24vQ0ZTZXQuaD4KICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxDb25uZWN0aW9uLmg+
CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9FeGNlcHRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0FuaW1hdGlvbkNvbnRyb2xsZXIuaD4KQEAgLTcyNCw3ICs3MjUsOCBAQCArICh2
b2lkKV9yZXBvcnRFeGNlcHRpb246KEpTVmFsdWVSZWYpZXhjCiAgICAgaWYgKCF0b0pTRE9NV2lu
ZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgdG9KUyhleGVjU3RhdGUsIGV4Y2VwdGlv
bikpOworICAgIEV4Y2VwdGlvbiogdm1FeGNlcHRpb24gPSBFeGNlcHRpb246OmNhc3QodG9KUyhl
eGVjU3RhdGUsIGV4Y2VwdGlvbikpOworICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjU3RhdGUsIHZt
RXhjZXB0aW9uKTsKIH0KIAogc3RhdGljIHZvaWQgV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9u
Q2FjaGVQYXRoSWZOZWNlc3NhcnkoKQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVncmVz
cy0xMzE1MzAtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9t
L3JlZ3Jlc3MtMTMxNTMwLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTg1MTEwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9kb20vcmVncmVzcy0xMzE1MzAtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogQ09OU09MRSBNRVNTQUdFOiBsaW5lIDU6IEV4Y2VwdGlvbiB0byB0
cmlnZ2VyIHVud2luZGluZyBpbiBNdXRhdGlvbk9ic2VydmVyCi1DT05TT0xFIE1FU1NBR0U6IFBl
bmRpbmcgZXhjZXB0aW9uIGJlZm9yZSBNdXRhdGlvbk9ic2VydmVycyBhcmUgY2FsbGVkLgorQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDIyOiBQZW5kaW5nIGV4Y2VwdGlvbiBiZWZvcmUgTXV0YXRpb25P
YnNlcnZlcnMgYXJlIGNhbGxlZC4KIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cHM6Ly93ZWJraXQu
b3JnL2IvMTMxNTMwLiBUaGlzIHRlc3Qgc2hvdWxkIG5vdCBjcmFzaC4KIAogTXV0YXRlIHRoYXQg
bm9kZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254161</attachid>
            <date>2015-06-03 01:51:50 -0700</date>
            <delta_ts>2015-06-03 02:55:30 -0700</delta_ts>
            <desc>patch 3: fixed broken builds for another round of EWS testing</desc>
            <filename>wip-exception4.patch</filename>
            <type>text/plain</type>
            <size>136679</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4NTExMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDU0LDYgKzQ1NCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAg
ICBydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5jcHAKICAgICBydW50aW1lL0Vycm9ySW5zdGFu
Y2UuY3BwCiAgICAgcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKKyAgICBydW50aW1lL0V4Y2Vw
dGlvbi5jcHAKICAgICBydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCiAgICAgcnVudGltZS9FeGNl
cHRpb25IZWxwZXJzLmNwcAogICAgIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNvbXBs
ZXRpb24uaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJEaXNh
c3NlbWJsZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFeGNlcHRpb25I
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJJbml0aWFs
aXplVGhyZWFkaW5nLmgiCkBAIC04OTksMTMgKzkwMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoCiAgICAg
ICAgIGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksICJhcmd1bWVudHMiKSwgYXJyYXkpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRpb247
CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKICAg
ICBzdG9wV2F0Y2guc3RhcnQoKTsKLSAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSwganNjU291cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXhj
ZXB0aW9uKTsKKyAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291
cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCBleGNlcHRpb24pOwogICAg
IHN0b3BXYXRjaC5zdG9wKCk7CiAKLSAgICBpZiAoISFleGNlcHRpb24pIHsKKyAgICBpZiAoZXhj
ZXB0aW9uKSB7CiAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpAQCAtOTIyLDggKzkyMyw4IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2EKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgCi0gICAgSlNWYWx1
ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFt
ZSksIEpTVmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEV4Y2VwdGlvbiogZXZh
bHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBK
U1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIGlmIChldmFsdWF0aW9uRXhjZXB0
aW9uKQogICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV2YWx1YXRpb25F
eGNlcHRpb24pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTEyODUs
MTUgKzEyODYsMTUgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0Kgog
CiAgICAgICAgIHZtLnN0YXJ0U2FtcGxpbmcoKTsKIAotICAgICAgICBKU1ZhbHVlIGV2YWx1YXRp
b25FeGNlcHRpb247Ci0gICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdCwgZmlsZU5hbWUpLCBKU1Zh
bHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgRXhjZXB0aW9uKiBldmFsdWF0
aW9uRXhjZXB0aW9uOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZpbGVOYW1lKSwgSlNW
YWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3Mg
JiYgIWV2YWx1YXRpb25FeGNlcHRpb247CiAgICAgICAgIGlmIChkdW1wICYmICFldmFsdWF0aW9u
RXhjZXB0aW9uKQogICAgICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50
b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNl
cHRpb24pIHsKLSAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlv
bkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHBy
aW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0
cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIElkZW50aWZpZXIgc3RhY2tJ
RCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksICJz
dGFjayIpOwotICAgICAgICAgICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXZhbHVhdGlvbkV4Y2Vw
dGlvbi5nZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOworICAgICAgICAg
ICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS5nZXQo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOwogICAgICAgICAgICAgaWYgKCFz
dGFja1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIl
c1xuIiwgc3RhY2tWYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZh
bHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
fQpAQCAtMTM0OSw4ICsxMzUwLDggQEAgc3RhdGljIHZvaWQgcnVuSW50ZXJhY3RpdmUoR2xvYmFs
T2JqZWN0KgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBl
dmFsdWF0aW9uRXhjZXB0aW9uOwotICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVh
dGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc291cmNlLCBpbnRlcnBy
ZXRlck5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgRXhj
ZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVl
ID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc291cmNl
LCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogI2Vs
c2UKICAgICAgICAgcHJpbnRmKCIlcyIsIGludGVyYWN0aXZlUHJvbXB0KTsKICAgICAgICAgVmVj
dG9yPGNoYXIsIDI1Nj4gbGluZTsKQEAgLTEzNjUsMTEgKzEzNjYsMTEgQEAgc3RhdGljIHZvaWQg
cnVuSW50ZXJhY3RpdmUoR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGxpbmUuYXBwZW5kKCdcMCcpOwogCi0gICAgICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKLSAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2UobGluZS5kYXRhKCksIGludGVycHJldGVyTmFtZSksIEpT
VmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgICAgICBFeGNlcHRpb24qIGV2YWx1
YXRpb25FeGNlcHRpb247CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKGxpbmUuZGF0YSgpLCBpbnRlcnBy
ZXRlck5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogI2VuZGlmCiAgICAg
ICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQotICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRp
b246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhj
ZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFs
dWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
KS51dGY4KCkuZGF0YSgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNw
cAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQVBJQ2FzdC5o
IgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNs
dWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNs
dWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIK
QEAgLTYzLDEyICs2NCwxMiBAQCBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0
UmVmCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKTsKICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT5z
dHJpbmcoKSwgc291cmNlVVJMID8gc291cmNlVVJMLT5zdHJpbmcoKSA6IFN0cmluZygpLCBUZXh0
UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHN0YXJ0aW5nTGluZU51bWJl
ciksIE9yZGluYWxOdW1iZXI6OmZpcnN0KCkpKTsKIAotICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4
Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIHNvdXJjZSwganNUaGlzT2JqZWN0LCAmZXZhbHVhdGlvbkV4Y2VwdGlv
bik7CisgICAgRXhjZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmV0
dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc291cmNlLCBq
c1RoaXNPYmplY3QsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogCiAgICAgaWYgKGV2YWx1YXRpb25F
eGNlcHRpb24pIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRp
b24gPSB0b1JlZihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgICAgICpleGNl
cHRpb24gPSB0b1JlZihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1ZSgpKTsKICNpZiBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKICAgICAgICAgLy8gRklYTUU6IElmIHdlIGhhdmUgYSBk
ZWJ1Z2dlciBhdHRhY2hlZCB3ZSBjb3VsZCBsZWFybiBhYm91dCBQYXJzZUVycm9yIGV4Y2VwdGlv
bnMgdGhyb3VnaAogICAgICAgICAvLyBTY3JpcHREZWJ1Z1NlcnZlcjo6c291cmNlUGFyc2VkIGFu
ZCB0aGlzIHBhdGggY291bGQgcHJvZHVjZSBhIGR1cGxpY2F0ZSB3YXJuaW5nLiBUaGUKQEAgLTEw
Nyw3ICsxMDgsOCBAQCBib29sIEpTQ2hlY2tTY3JpcHRTeW50YXgoSlNDb250ZXh0UmVmIGN0CiAg
ICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhl
Yywgc3ludGF4RXhjZXB0aW9uKTsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAg
ICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVw
b3J0QVBJRXhjZXB0aW9uKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CisgICAgICAgIEV4Y2VwdGlv
biogZXhjZXB0aW9uID0gRXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgc3ludGF4RXhjZXB0
aW9uKTsKKyAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiAjZW5kaWYKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QAogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRhdGVDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSWRlbnRp
Zmllci5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKQEAgLTYxLDYgKzYyLDIx
IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKK3N0YXRpYyBib29sIGhhbmRsZUV4Y2VwdGlv
bklmTmVlZGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVJlZiogcmV0dXJuZWRFeGNlcHRpb25S
ZWYpCit7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEV4Y2VwdGlv
biogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIGlmIChyZXR1cm5lZEV4
Y2VwdGlvblJlZikKKyAgICAgICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvblJlZiA9IHRvUmVmKGV4
ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgICAgIGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVj
LCBleGNlcHRpb24pOworI2VuZGlmCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIEpTQ2xhc3NSZWYgSlNDbGFzc0NyZWF0ZShjb25zdCBKU0NsYXNz
RGVmaW5pdGlvbiogZGVmaW5pdGlvbikKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CkBA
IC0xNDgsMTYgKzE2NCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUZ1bmN0aW9uKEpTQ29u
dGUKICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhleGVjLCBib2R5LT5zdHJpbmcoKSkpOwogCiAg
ICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgYXJncywgbmFtZUlELCBzb3VyY2VVUkwgPyBzb3VyY2VVUkwtPnN0
cmluZygpIDogU3RyaW5nKCksIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFz
ZWRJbnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcjo6Zmlyc3QoKSkpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAg
ICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAg
ICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5y
ZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYg
KGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3Vs
dCA9IDA7Ci0gICAgfQogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQogCkBAIC0xODAsMTYg
KzE4OCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUFycmF5KEpTQ29udGV4dFIKICAgICB9
IGVsc2UKICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKIAot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAg
ICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQot
ICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAg
aWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJl
c3VsdCA9IDA7Ci0gICAgfQogCiAgICAgcmV0dXJuIHRvUmVmKHJlc3VsdCk7CiB9CkBAIC0yMDgs
MTYgKzIwOCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZURhdGUoSlNDb250ZXh0UmUKICAg
ICAgICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBhcmd1bWVudHNbaV0pKTsKIAogICAgIEpT
T2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3REYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgYXJnTGlzdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAg
aWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGNl
cHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25W
YWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywgZXhj
ZXB0aW9uKSkKICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICB9CiAKICAgICByZXR1cm4gdG9SZWYo
cmVzdWx0KTsKIH0KQEAgLTIzNSwxNiArMjI3LDggQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtl
RXJyb3IoSlNDb250ZXh0UgogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCk7CiAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2Fn
ZSk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9u
KQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsK
LSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRp
ZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAg
ICAgICByZXN1bHQgPSAwOwotICAgIH0KIAogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQpA
QCAtMjYzLDE2ICsyNDcsOCBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VSZWdFeHAoSlNDb250
ZXh0CiAgICAgICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgYXJndW1lbnRzW2ldKSk7CiAK
ICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0UmVnRXhwKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgIGFyZ0xpc3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7
Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYo
ZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwot
I2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFs
T2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywg
ZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVk
KGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQogICAgIAogICAg
IHJldHVybiB0b1JlZihyZXN1bHQpOwogfQpAQCAtMzM5LDE1ICszMTUsNyBAQCBKU1ZhbHVlUmVm
IEpTT2JqZWN0R2V0UHJvcGVydHkoSlNDb250ZXh0CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0g
dG9KUyhvYmplY3QpOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNPYmplY3QtPmdldChleGVj
LCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMt
PmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2Vw
dGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+
dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhj
ZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0KKyAgICBoYW5kbGVF
eGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVybiB0b1JlZihleGVj
LCBqc1ZhbHVlKTsKIH0KIApAQCAtMzcyLDE1ICszNDAsNyBAQCB2b2lkIEpTT2JqZWN0U2V0UHJv
cGVydHkoSlNDb250ZXh0UmVmIGN0CiAgICAgICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5w
dXQoanNPYmplY3QsIGV4ZWMsIG5hbWUsIGpzVmFsdWUsIHNsb3QpOwogICAgIH0KIAotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAg
ICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBv
cnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAg
IGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CiAKIEpTVmFsdWVS
ZWYgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RS
ZWYgb2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CkBAIC0zOTUsMTUgKzM1NSw3IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5k
ZXgoSlMKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAKICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSBqc09iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5SW5kZXgpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAg
ICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBv
cnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAg
IGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIHRv
UmVmKGV4ZWMsIGpzVmFsdWUpOwogfQogCkBAIC00MjEsMTUgKzM3Myw3IEBAIHZvaWQgSlNPYmpl
Y3RTZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXgKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pT
KGV4ZWMsIHZhbHVlKTsKICAgICAKICAgICBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJ
bmRleChqc09iamVjdCwgZXhlYywgcHJvcGVydHlJbmRleCwganNWYWx1ZSwgZmFsc2UpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAg
ICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAg
ICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5y
ZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQor
ICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CiAKIGJvb2wg
SlNPYmplY3REZWxldGVQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmpl
Y3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAt
NDQ0LDE1ICszODgsNyBAQCBib29sIEpTT2JqZWN0RGVsZXRlUHJvcGVydHkoSlNDb250ZXh0UmVm
CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCiAgICAgYm9vbCByZXN1
bHQgPSBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoanNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhl
Yy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhj
ZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVj
LT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElF
eGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAgIGhhbmRs
ZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtNjE2LDE2ICs1NTIsOCBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0Q2FsbEFzRnVuY3Rp
b24oSlNDb250CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSB0
b1JlZihleGVjLCBjYWxsKGV4ZWMsIGpzT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVGhp
c09iamVjdCwgYXJnTGlzdCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAg
ICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAg
IGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhj
ZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
VmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4
Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTY1NywxNiArNTg1LDggQEAgSlNPYmplY3RSZWYgSlNPYmplY3RDYWxsQXNDb25z
dHJ1Y3RvcihKUwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgaSsr
KQogICAgICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGFyZ3VtZW50c1tpXSkpOwogICAg
IEpTT2JqZWN0UmVmIHJlc3VsdCA9IHRvUmVmKGNvbnN0cnVjdChleGVjLCBqc09iamVjdCwgY29u
c3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJnTGlzdCkpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhj
ZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVu
dHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRp
b24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlv
bklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHRSZWYuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
CiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiVk0u
aCIKICNpbmNsdWRlICJKU1NjcmlwdFJlZlByaXZhdGUuaCIKQEAgLTE0MiwxMiArMTQzLDEyIEBA
IEpTVmFsdWVSZWYgSlNTY3JpcHRFdmFsdWF0ZShKU0NvbnRleHRSZWYKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIEpT
VmFsdWUgaW50ZXJuYWxFeGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBpbnRlcm5hbEV4Y2VwdGlv
bjsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHRoaXNWYWx1ZVJlZiA/IHRvSlMoZXhlYywgdGhp
c1ZhbHVlUmVmKSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0
ZShleGVjLCBTb3VyY2VDb2RlKHNjcmlwdCksIHRoaXNWYWx1ZSwgJmludGVybmFsRXhjZXB0aW9u
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGV4ZWMsIFNvdXJjZUNvZGUoc2NyaXB0
KSwgdGhpc1ZhbHVlLCBpbnRlcm5hbEV4Y2VwdGlvbik7CiAgICAgaWYgKGludGVybmFsRXhjZXB0
aW9uKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0g
dG9SZWYoZXhlYywgaW50ZXJuYWxFeGNlcHRpb24pOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IHRvUmVmKGV4ZWMsIGludGVybmFsRXhjZXB0aW9uLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIEFTU0VSVChyZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1ZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWYWx1ZS5tbQkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZhbHVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW1wb3J0
ICJBUElDYXN0LmgiCiAjaW1wb3J0ICJEYXRlSW5zdGFuY2UuaCIKICNpbXBvcnQgIkVycm9yLmgi
CisjaW1wb3J0ICJFeGNlcHRpb24uaCIKICNpbXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCiAjaW1w
b3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZUludGVy
bmFsLmgiCkBAIC02NDUsOSArNjQ2LDEwIEBAIEpTQ29udGFpbmVyQ29udmVydG9yOjpUYXNrIEpT
Q29udGFpbmVyQ28KIH0KIAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotc3RhdGljIHZv
aWQgcmVwb3J0RXhjZXB0aW9uVG9JbnNwZWN0b3IoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQs
IEpTQzo6SlNWYWx1ZSBleGNlcHRpb24pCitzdGF0aWMgdm9pZCByZXBvcnRFeGNlcHRpb25Ub0lu
c3BlY3RvcihKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlKQogewogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAg
ICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246OmNyZWF0ZShleGVj
LT52bSgpLCBleGNlcHRpb25WYWx1ZSk7CiAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bik7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJl
Zi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVm
LmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Zh
bHVlUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAi
QVBJQ2FzdC5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bi5oIgogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCkBAIC01Miw2ICs1MywyMSBAQAogCiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCitzdGF0aWMgYm9vbCBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVSZWYqIHJldHVybmVkRXhjZXB0aW9uUmVmKQoreworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlv
biA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb25SZWYp
CisgICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb25SZWYgPSB0b1JlZihleGVjLCBleGNlcHRp
b24tPnZhbHVlKCkpOworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQorICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
KTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCiAjaWYgUExBVEZPUk0oTUFDKQogc3RhdGljIGJvb2wgZXZlcm5vdGVIYWNrTmVlZGVk
KCkKIHsKQEAgLTIyNCwxNSArMjQwLDggQEAgYm9vbCBKU1ZhbHVlSXNFcXVhbChKU0NvbnRleHRS
ZWYgY3R4LCBKUwogICAgIEpTVmFsdWUganNCID0gdG9KUyhleGVjLCBiKTsKIAogICAgIGJvb2wg
cmVzdWx0ID0gSlNWYWx1ZTo6ZXF1YWwoZXhlYywganNBLCBqc0IpOyAvLyBmYWxzZSBpZiBhbiBl
eGNlcHRpb24gaXMgdGhyb3duCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAg
aWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGNl
cHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25W
YWx1ZSk7Ci0jZW5kaWYKLSAgICB9CisgICAgaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywg
ZXhjZXB0aW9uKTsKKyAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNjYsMTUgKzI3
NSw3IEBAIGJvb2wgSlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0cnVjdG9yKEpTQ28KICAgICBpZiAo
IWpzQ29uc3RydWN0b3ItPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmltcGxlbWVudHNIYXNJbnN0
YW5jZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCByZXN1bHQgPSBqc0NvbnN0
cnVjdG9yLT5oYXNJbnN0YW5jZShleGVjLCBqc1ZhbHVlKTsgLy8gZmFsc2UgaWYgYW4gZXhjZXB0
aW9uIGlzIHRocm93bgotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBK
U1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChl
eGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9u
VmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUp
OwotI2VuZGlmCi0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2Vw
dGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzY4LDE2ICszNjksOCBAQCBKU1N0
cmluZ1JlZiBKU1ZhbHVlQ3JlYXRlSlNPTlN0cmluZyhKU0NvCiAgICAgU3RyaW5nIHJlc3VsdCA9
IEpTT05TdHJpbmdpZnkoZXhlYywgdmFsdWUsIGluZGVudCk7CiAgICAgaWYgKGV4Y2VwdGlvbikK
ICAgICAgICAgKmV4Y2VwdGlvbiA9IDA7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVj
LCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmpl
Y3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNl
cHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhl
YywgZXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogICAgIHJldHVybiBPcGFx
dWVKU1N0cmluZzo6Y3JlYXRlKHJlc3VsdCkubGVha1JlZigpOwogfQogCkBAIC00MDYsMTYgKzM5
OSw4IEBAIGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0eCwKICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKIAogICAgIGRvdWJsZSBudW1iZXIgPSBq
c1ZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewot
ICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAg
ICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywg
ZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVO
QUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0
aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMs
IGV4Y2VwdGlvbikpCiAgICAgICAgIG51bWJlciA9IFBOYU47Ci0gICAgfQogICAgIHJldHVybiBu
dW1iZXI7CiB9CiAKQEAgLTQzMSwxNiArNDE2LDggQEAgSlNTdHJpbmdSZWYgSlNWYWx1ZVRvU3Ry
aW5nQ29weShKU0NvbnRleAogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUp
OwogICAgIAogICAgIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gc3RyaW5nUmVmKE9wYXF1ZUpTU3Ry
aW5nOjpjcmVhdGUoanNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1
ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAg
ICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAg
ICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVw
b3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgorICAgIGlmICho
YW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAgICAgICBzdHJpbmdS
ZWYuY2xlYXIoKTsKLSAgICB9CiAgICAgcmV0dXJuIHN0cmluZ1JlZi5yZWxlYXNlKCkubGVha1Jl
ZigpOwogfQogCkBAIC00NTYsMTYgKzQzMyw4IEBAIEpTT2JqZWN0UmVmIEpTVmFsdWVUb09iamVj
dChKU0NvbnRleHRSZWYKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsK
ICAgICAKICAgICBKU09iamVjdFJlZiBvYmplY3RSZWYgPSB0b1JlZihqc1ZhbHVlLnRvT2JqZWN0
KGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1
ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0
aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVl
KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNl
bmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQog
ICAgICAgICBvYmplY3RSZWYgPSAwOwotICAgIH0KICAgICByZXR1cm4gb2JqZWN0UmVmOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4
NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcxMiw2ICs3MTIsNyBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJvckhhbmRsaW5nU2NvcGUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJvckluc3RhbmNlLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JQcm90b3R5cGUu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb24uY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb25GdXp6LmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uSGVscGVy
cy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4ZWN1dGFibGUu
Y3BwIiAvPgpAQCAtMTUwMyw2ICsxNTA0LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcRXJyb3JIYW5kbGluZ1Njb3BlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXEVycm9ySW5zdGFuY2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcRXJyb3JQcm90b3R5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEV4Y2VwdGlvbkZ1enouaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcRXhjZXB0aW9uSGVscGVycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxFeGVjdXRhYmxlLmgiIC8+CkBAIC0xODI3LDQgKzE4MjksNCBAQAogICA8SW1wb3J0
R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChW
Q1RhcmdldHNQYXRoKVxCdWlsZEN1c3RvbWl6YXRpb25zXG1hc20udGFyZ2V0cyIgLz4KICAgPC9J
bXBvcnRHcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1By
b2plY3Q+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ai5maWx0ZXJzCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtp
bmcgY29weSkKQEAgLTE2OTgsNiArMTY5OCw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHVmFsdWVTdHJlbmd0aC5jcHAiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4K
ICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhj
ZXB0aW9uLmNwcCI+CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsQ29t
cGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uRnV6ei5j
cHAiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBA
IC00MTkwLDYgKzQxOTMsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Zh
bHVlU3RyZW5ndGguaCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb24uaCI+Cisg
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uRnV6ei5oIj4KICAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtNDQ4NSw0ICs0NDkxLDQg
QEAKICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9NQVNNPgogICA8L0l0ZW1Hcm91
cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg1MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTE2NjAsNiArMTY2MCw4IEBACiAJCUU0OURDMTZEMTJFRjI5
NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNDkxMkVGMjYxQTAwMTg0QTFGIC8q
IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRBMDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlv
blRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuY3BwICovOyB9OwogCQlGRTBENEEwOTFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4
dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFMEQ0QTA3MUFCQTI0MzcwMDJGNTRCRiAvKiBHbG9iYWxDb250ZXh0V2l0
aEZpbmFsaXplclRlc3QuY3BwICovOyB9OworCQlGRTFDMEZGRDFCMTkzRTk4MDBCNTNGQ0EgLyog
RXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUxQzBGRkYxQjE5NEZEMTAwQjUz
RkNBIC8qIEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0aW9uLmNwcCAqLzsg
fTsKIAkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUIxNUYwNEE5NTAw
REYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovOyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTM4NEVFNTFBRERC
N0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NEVFMTFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJW
TS5jcHAgKi87IH07CkBAIC0zNDYzLDYgKzM0NjUsOCBAQAogCQlGRTBENEEwNTFBQjhERDBBMDAy
RjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBFeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvRXhl
Y3V0aW9uVGltZUxpbWl0VGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTBE
NEEwNzFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEdsb2JhbENvbnRleHRXaXRo
RmluYWxpemVyVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvR2xvYmFsQ29udGV4dFdpdGhGaW5h
bGl6ZXJUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDgxQUJB
MjQzNzAwMkY1NEJGIC8qIEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3Qu
aDsgcGF0aCA9IEFQSS90ZXN0cy9HbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4
Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxQzBGRkUxQjE5NEZEMTAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNl
cHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1
MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJ
bnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7
IHBhdGggPSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFMzg0RUUxMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9sbGFyVk0uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDQyNyw2ICs0NDMxLDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAw
RjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5
NyAvKiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3
IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCisJCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5oICovLAorCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRp
b24uY3BwICovLAogCQkJCTBGMTJERTBEMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6
LmNwcCAqLywKIAkJCQkwRjEyREUwRTE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5o
ICovLAogCQkJCTE0MjlEODc3MEVEMjFBQ0QwMEI4OTYxOSAvKiBFeGNlcHRpb25IZWxwZXJzLmNw
cCAqLywKQEAgLTU2MjQsNiArNTYzMCw3IEBACiAJCQkJRkU0RDU1QjgxQUU3MTZDQTAwNTJFNDU5
IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1MDY4NjUxQUUyNDYz
OTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzQ0
MkNCMjUxQTZDREI4QzAwNUQzRDdDIC8qIEpTSW5wdXRzLmpzb24gaW4gSGVhZGVycyAqLywKKwkJ
CQlGRTFDMEZGRDFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tM
b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcxMEUxOUY2REY4MTAwOThGNUVDIC8q
IEluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIGluIEhlYWRlcnMgKi8sCkBA
IC03NDA4LDYgKzc0MTUsNyBAQAogCQkJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1By
b21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENEMjE4NkY4QTkzMDA5
NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0
RTFFMTdCRUUyMkUwMDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkUxQzBGRkYxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3MDlGQjg2QjFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENERTE4NzEyNThEMDA5NTVDMjQgLyogSlNQ
cm9taXNlUmVhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAw
OUYxN0QwIC8qIEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1
bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMywxMSArMTMzLDExIEBAIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2EKICAgICAgICAgcmV0dXJuIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlKCk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICBKU1ZhbHVl
IGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICBpZiAobV9jYWxsSGFu
ZGxlcikKLSAgICAgICAgcmVzdWx0ID0gbV9jYWxsSGFuZGxlcihtX2V4ZWMsIGZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIG1fYXJndW1lbnRzLCAmZXhjZXB0aW9uKTsK
KyAgICAgICAgcmVzdWx0ID0gbV9jYWxsSGFuZGxlcihtX2V4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIG1fYXJndW1lbnRzLCBleGNlcHRpb24pOwogICAgIGVs
c2UKLSAgICAgICAgcmVzdWx0ID0gSlNDOjpjYWxsKG1fZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBl
LCBjYWxsRGF0YSwgdGhpc09iamVjdCwgbV9hcmd1bWVudHMsICZleGNlcHRpb24pOworICAgICAg
ICByZXN1bHQgPSBKU0M6OmNhbGwobV9leGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCB0aGlzT2JqZWN0LCBtX2FyZ3VtZW50cywgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRp
b24pIHsKICAgICAgICAgaGFkRXhjZXB0aW9uID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmgJKHJldmlzaW9u
IDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlv
bkNhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogCiBjbGFz
cyBKU19FWFBPUlRfUFJJVkFURSBTY3JpcHRGdW5jdGlvbkNhbGwgOiBwdWJsaWMgU2NyaXB0Q2Fs
bEFyZ3VtZW50SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTVmFsdWUgKCpT
Y3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1Zh
bHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNh
bGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdM
aXN0JiBhcmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbik7CisgICAgdHlwZWRlZiBKU0M6OkpT
VmFsdWUgKCpTY3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25z
dCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3Qg
SlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkV4Y2VwdGlvbiomIGV4Y2VwdGlvbik7CiAgICAgU2Ny
aXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBTY3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyIGhhbmRsZXIgPSBudWxscHRyKTsK
ICAgICBTY3JpcHRWYWx1ZSBjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbik7CiAgICAgU2NyaXB0VmFs
dWUgY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyAr
MTEzLDcgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1c2hfd2l0aF9zY29wZSIsICJs
ZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcG9wX3Njb3BlIiwgImxl
bmd0aCIgOiAyIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXNoX25hbWVfc2NvcGUi
LCAibGVuZ3RoIiA6IDUgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NhdGNoIiwgImxl
bmd0aCIgOiAyIH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYXRjaCIsICJsZW5ndGgi
IDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdGhyb3ciLCAibGVuZ3RoIiA6IDIg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Rocm93X3N0YXRpY19lcnJvciIsICJsZW5n
dGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVidWciLCAibGVuZ3RoIiA6
IDMgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZVVzZURlZi5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcgKzMwMyw2IEBA
IHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2RlQmwKICAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGU6CiAgICAgY2FzZSBvcF9zdHJjYXQ6CiAgICAgY2FzZSBvcF90b19wcmltaXRp
dmU6Ci0gICAgY2FzZSBvcF9jYXRjaDoKICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgogICAgIGNh
c2Ugb3BfbmV3X2FycmF5OgogICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKQEAgLTM3NCw2
ICszNzMsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAg
ICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBvcF9jYXRj
aDoKICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OiB7CiAgICAgICAgIGZ1
bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCk7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2Rl
SUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0ODQsNyArMTQ4NCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBvcF9jYXRjaDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJh
bmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYXRjaCIsIHIwKTsKKyAgICAgICAgICAgIGlu
dCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2F0Y2giKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRh
dGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3Ro
cm93OiB7CkBAIC0yODc4LDcgKzI4ODAsNyBAQCBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVk
UmVwbGFjZW1lbnQoCiB9CiAjZW5kaWYKIAotSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxl
ckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorSGFuZGxlckluZm8q
IENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0LCBib29sIHJlcXVpcmVDYXRjaEhhbmRsZXIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYnl0
ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogCkBAIC0yODg4LDYgKzI4OTAs
OSBAQCBIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvCiAgICAgVmVjdG9y
PEhhbmRsZXJJbmZvPiYgZXhjZXB0aW9uSGFuZGxlcnMgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhjZXB0aW9uSGFuZGxlcnMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25I
YW5kbGVyc1tpXTsKKyAgICAgICAgaWYgKHJlcXVpcmVDYXRjaEhhbmRsZXIgJiYgIWhhbmRsZXIu
aXNDYXRjaEhhbmRsZXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIC8vIEhh
bmRsZXJzIGFyZSBvcmRlcmVkIGlubmVybW9zdCBmaXJzdCwgc28gdGhlIGZpcnN0IGhhbmRsZXIg
d2UgZW5jb3VudGVyCiAgICAgICAgIC8vIHRoYXQgY29udGFpbnMgdGhlIHNvdXJjZSBhZGRyZXNz
IGlzIHRoZSBjb3JyZWN0IGhhbmRsZXIgdG8gdXNlLgogICAgICAgICBpZiAoaGFuZGxlci5zdGFy
dCA8PSBieXRlY29kZU9mZnNldCAmJiBoYW5kbGVyLmVuZCA+IGJ5dGVjb2RlT2Zmc2V0KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODUsNyArMTg1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
aW5kZXggPj0gbV9udW1WYXJzOwogICAgIH0KIAotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9y
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEhhbmRsZXJJbmZv
KiBoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGJvb2wg
cmVxdWlyZUNhdGNoSGFuZGxlciA9IGZhbHNlKTsKICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyRm9y
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogICAgIHVuc2lnbmVkIGNv
bHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKICAg
ICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0LCBpbnQmIGRpdm90LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0hhbmRsZXJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0hhbmRsZXJJbmZvLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIGVudW0gY2xhc3MgSGFuZGxlclR5cGUgewogc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7CiAg
ICAgSGFuZGxlclR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEhhbmRsZXJU
eXBlPih0eXBlQml0cyk7IH0KICAgICB2b2lkIHNldFR5cGUoSGFuZGxlclR5cGUgdHlwZSkgeyB0
eXBlQml0cyA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKTsgfQotICAgIAorCiAgICAgY29u
c3QgY2hhciogdHlwZU5hbWUoKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKQEAg
LTU1LDkgKzU1LDkgQEAgc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIAorCiAgICAgYm9vbCBpc0NhdGNoSGFuZGxl
cigpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBIYW5kbGVyVHlwZTo6Q2F0Y2g7IH0KLSAgICAK
KwogICAgIHVpbnQzMl90IHN0YXJ0OwogICAgIHVpbnQzMl90IGVuZDsKICAgICB1aW50MzJfdCB0
YXJnZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1MjgsNyArMjUyOCw3IEBAIFRyeURhdGEqIEJ5dGVjb2RlR2VuZXJhdG9y
OjpwdXNoVHJ5KExhYmUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kRW1pdENhdGNoKFRyeURhdGEqIHRyeURhdGEsIFJlZ2lz
dGVySUQqIHRhcmdldFJlZ2lzdGVyLCBMYWJlbCogZW5kLCBIYW5kbGVyVHlwZSBoYW5kbGVyVHlw
ZSkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFRyeUFuZEVtaXRDYXRjaChUcnlEYXRhKiB0
cnlEYXRhLCBSZWdpc3RlcklEKiBleGNlcHRpb25SZWdpc3RlciwgUmVnaXN0ZXJJRCogdGhyb3du
VmFsdWVSZWdpc3RlciwgTGFiZWwqIGVuZCwgSGFuZGxlclR5cGUgaGFuZGxlclR5cGUpCiB7CiAg
ICAgbV91c2VzRXhjZXB0aW9ucyA9IHRydWU7CiAgICAgCkBAIC0yNTQ2LDggKzI1NDYsOCBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kCiAgICAgdHJ5UmFuZ2UudHJ5
RGF0YS0+aGFuZGxlclR5cGUgPSBoYW5kbGVyVHlwZTsKIAogICAgIGVtaXRPcGNvZGUob3BfY2F0
Y2gpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXRSZWdpc3Rlci0+aW5kZXgoKSk7
Ci0gICAgcmV0dXJuIHRhcmdldFJlZ2lzdGVyOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChl
eGNlcHRpb25SZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRo
cm93blZhbHVlUmVnaXN0ZXItPmluZGV4KCkpOwogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC0yNzYw
LDcgKzI3NjAsMTEgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAog
ICAgICAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVlbmNlIGZvciB0aHJvdy1lZCBjb250cm9sIGZs
b3cuCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gY2F0Y2hIZXJlID0gZW1p
dExhYmVsKG5ld0xhYmVsKCkuZ2V0KCkpOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGV4Y2VwdGlvblJlZ2lzdGVyID0gcG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIG5ld1RlbXBv
cmFyeSgpLCBjYXRjaEhlcmUuZ2V0KCksIEhhbmRsZXJUeXBlOjpTeW50aGVzaXplZEZpbmFsbHkp
OworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gbmV3
VGVtcG9yYXJ5KCk7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhyb3duVmFsdWVS
ZWdpc3RlciA9IG5ld1RlbXBvcmFyeSgpOworICAgICAgICAgICAgcG9wVHJ5QW5kRW1pdENhdGNo
KHRyeURhdGEsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLAorICAgICAgICAgICAgICAgIHRocm93
blZhbHVlUmVnaXN0ZXIuZ2V0KCksIGNhdGNoSGVyZS5nZXQoKSwgSGFuZGxlclR5cGU6OlN5bnRo
ZXNpemVkRmluYWxseSk7CisKICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gY2F0Y2hEb25lID0g
bmV3TGFiZWwoKTsKIAogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVybk1ldGhv
ZCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlO
YW1lcygpLnJldHVybktleXdvcmQpOwpAQCAtMjc3OCw3ICsyNzgyLDggQEAgdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAogICAgICAgICAgICAgZW1pdFRocm93KGV4Y2Vw
dGlvblJlZ2lzdGVyLmdldCgpKTsKIAogICAgICAgICAgICAgLy8gQWJzb3JiIGV4Y2VwdGlvbi4K
LSAgICAgICAgICAgIHBvcFRyeUFuZEVtaXRDYXRjaChyZXR1cm5DYWxsVHJ5RGF0YSwgbmV3VGVt
cG9yYXJ5KCksIGNhdGNoRG9uZS5nZXQoKSwgSGFuZGxlclR5cGU6OlN5bnRoZXNpemVkRmluYWxs
eSk7CisgICAgICAgICAgICBwb3BUcnlBbmRFbWl0Q2F0Y2gocmV0dXJuQ2FsbFRyeURhdGEsIG5l
d1RlbXBvcmFyeSgpLAorICAgICAgICAgICAgICAgIG5ld1RlbXBvcmFyeSgpLCBjYXRjaERvbmUu
Z2V0KCksIEhhbmRsZXJUeXBlOjpTeW50aGVzaXplZEZpbmFsbHkpOwogICAgICAgICAgICAgZW1p
dFRocm93KGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKICAgICAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1Myw3ICs1NTMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gU3RhcnQgYSB0cnkgYmxvY2suICdzdGFy
dCcgbXVzdCBoYXZlIGJlZW4gZW1pdHRlZC4KICAgICAgICAgVHJ5RGF0YSogcHVzaFRyeShMYWJl
bCogc3RhcnQpOwogICAgICAgICAvLyBFbmQgYSB0cnkgYmxvY2suICdlbmQnIG11c3QgaGF2ZSBi
ZWVuIGVtaXR0ZWQuCi0gICAgICAgIFJlZ2lzdGVySUQqIHBvcFRyeUFuZEVtaXRDYXRjaChUcnlE
YXRhKiwgUmVnaXN0ZXJJRCogdGFyZ2V0UmVnaXN0ZXIsIExhYmVsKiBlbmQsIEhhbmRsZXJUeXBl
KTsKKyAgICAgICAgdm9pZCBwb3BUcnlBbmRFbWl0Q2F0Y2goVHJ5RGF0YSosIFJlZ2lzdGVySUQq
IGV4Y2VwdGlvblJlZ2lzdGVyLCBSZWdpc3RlcklEKiB0aHJvd25WYWx1ZVJlZ2lzdGVyLCBMYWJl
bCogZW5kLCBIYW5kbGVyVHlwZSk7CiAKICAgICAgICAgdm9pZCBlbWl0VGhyb3coUmVnaXN0ZXJJ
RCogZXhjKQogICAgICAgICB7IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODgxLDcgKzI4ODEsOSBAQCB2b2lkIFRyeU5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyCiAKICAgICAgICAgLy8gVW5jYXVnaHQgZXhjZXB0aW9uIHBhdGg6IHRoZSBj
YXRjaCBibG9jay4KICAgICAgICAgUmVmUHRyPExhYmVsPiBoZXJlID0gZ2VuZXJhdG9yLmVtaXRM
YWJlbChnZW5lcmF0b3IubmV3TGFiZWwoKS5nZXQoKSk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBleGNlcHRpb25SZWdpc3RlciA9IGdlbmVyYXRvci5wb3BUcnlBbmRFbWl0Q2F0Y2godHJ5
RGF0YSwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBoZXJlLmdldCgpLCBIYW5kbGVyVHlwZTo6
Q2F0Y2gpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVnaXN0ZXIgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aHJv
d25WYWx1ZVJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBnZW5l
cmF0b3IucG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgp
LCB0aHJvd25WYWx1ZVJlZ2lzdGVyLmdldCgpLCBoZXJlLmdldCgpLCBIYW5kbGVyVHlwZTo6Q2F0
Y2gpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fZmluYWxseUJsb2NrKSB7CiAgICAgICAgICAg
ICAvLyBJZiB0aGUgY2F0Y2ggYmxvY2sgdGhyb3dzIGFuIGV4Y2VwdGlvbiBhbmQgd2UgaGF2ZSBh
IGZpbmFsbHkgYmxvY2ssIHRoZW4gdGhlIGZpbmFsbHkKQEAgLTI4ODksNyArMjg5MSw3IEBAIHZv
aWQgVHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKICAgICAgICAgICAgIHRyeURh
dGEgPSBnZW5lcmF0b3IucHVzaFRyeShoZXJlLmdldCgpKTsKICAgICAgICAgfQogCi0gICAgICAg
IGdlbmVyYXRvci5lbWl0UHVzaENhdGNoU2NvcGUoZ2VuZXJhdG9yLnNjb3BlUmVnaXN0ZXIoKSwg
bV9leGNlcHRpb25JZGVudCwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksIERvbnREZWxldGUpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdFB1c2hDYXRjaFNjb3BlKGdlbmVyYXRvci5zY29wZVJlZ2lz
dGVyKCksIG1fdGhyb3duVmFsdWVJZGVudCwgdGhyb3duVmFsdWVSZWdpc3Rlci5nZXQoKSwgRG9u
dERlbGV0ZSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KG1fdHJ5
QmxvY2stPmVuZE9mZnNldCgpICsgMSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3Qs
IG1fY2F0Y2hCbG9jayk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UG9wU2NvcGUoZ2VuZXJhdG9y
LnNjb3BlUmVnaXN0ZXIoKSk7CkBAIC0yOTEyLDEwICsyOTE0LDEyIEBAIHZvaWQgVHJ5Tm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGZp
bmFsbHlFbmRMYWJlbC5nZXQoKSk7CiAKICAgICAgICAgLy8gVW5jYXVnaHQgZXhjZXB0aW9uIHBh
dGg6IGludm9rZSB0aGUgZmluYWxseSBibG9jaywgdGhlbiByZS10aHJvdyB0aGUgZXhjZXB0aW9u
LgotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcEV4Y2VwdGlvblJlZ2lzdGVyID0gZ2Vu
ZXJhdG9yLnBvcFRyeUFuZEVtaXRDYXRjaCh0cnlEYXRhLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIHByZUZpbmFsbHlMYWJlbC5nZXQoKSwgSGFuZGxlclR5cGU6OkZpbmFsbHkpOworICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aHJvd25WYWx1ZVJlZ2lzdGVy
ID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBnZW5lcmF0b3IucG9wVHJ5QW5k
RW1pdENhdGNoKHRyeURhdGEsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLCB0aHJvd25WYWx1ZVJl
Z2lzdGVyLmdldCgpLCBwcmVGaW5hbGx5TGFiZWwuZ2V0KCksIEhhbmRsZXJUeXBlOjpGaW5hbGx5
KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3coZmluYWxseVN0YXJ0
T2Zmc2V0KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9maW5hbGx5QmxvY2sp
OwotICAgICAgICBnZW5lcmF0b3IuZW1pdFRocm93KHRlbXBFeGNlcHRpb25SZWdpc3Rlci5nZXQo
KSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VGhyb3coZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkp
OwogCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZmluYWxseUVuZExhYmVsLmdldCgpKTsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cobV9maW5hbGx5QmxvY2st
PmVuZE9mZnNldCgpICsgMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw3ICs0ODcsNyBA
QCBib29sIERlYnVnZ2VyOjpoYXNCcmVha3BvaW50KFNvdXJjZUlEIHNvCiAgICAgLy8gc28gbWFr
ZSBpdCBsb29rcyBsaWtlIHRoZSBkZWJ1Z2dlciBpcyBhbHJlYWR5IHBhdXNlZC4KICAgICBUZW1w
b3JhcnlQYXVzZWRTdGF0ZSBwYXVzZWRTdGF0ZSgqdGhpcyk7CiAKLSAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICBEZWJ1Z2dlckNhbGxGcmFtZSog
ZGVidWdnZXJDYWxsRnJhbWUgPSBjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUoKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGRlYnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0ZShicmVha3BvaW50LT5jb25k
aXRpb24sIGV4Y2VwdGlvbik7CiAKQEAgLTY5NSwxMyArNjk1LDEzIEBAIHZvaWQgRGVidWdnZXI6
OnBhdXNlSWZOZWVkZWQoQ2FsbEZyYW1lKiAKICAgICB9CiB9CiAKLXZvaWQgRGVidWdnZXI6OmV4
Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNlcHRpb24sIGJvb2wgaGFz
SGFuZGxlcikKK3ZvaWQgRGVidWdnZXI6OmV4Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNWYWx1ZSBleGNlcHRpb24sIGJvb2wgaGFzQ2F0Y2hIYW5kbGVyKQogewogICAgIGlmIChtX2lz
UGF1c2VkKQogICAgICAgICByZXR1cm47CiAKICAgICBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHJl
YXNvbigqdGhpcywgUGF1c2VkRm9yRXhjZXB0aW9uKTsKLSAgICBpZiAobV9wYXVzZU9uRXhjZXB0
aW9uc1N0YXRlID09IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8IChtX3BhdXNlT25FeGNlcHRpb25z
U3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAmJiAhaGFzSGFuZGxlcikpIHsKKyAg
ICBpZiAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8
IChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAm
JiAhaGFzQ2F0Y2hIYW5kbGVyKSkgewogICAgICAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0g
dHJ1ZTsKICAgICAgICAgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCShyZXZp
c2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdm9pZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgU291cmNlUHJvdmlkZXIqLCBpbnQgZXJy
b3JMaW5lTnVtYmVyLCBjb25zdCBXVEY6OlN0cmluZyYgZXJyb3JNZXNzYWdlKSA9IDA7CiAKLSAg
ICB2b2lkIGV4Y2VwdGlvbihDYWxsRnJhbWUqLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBib29s
IGhhc0hhbmRsZXIpOworICAgIHZvaWQgZXhjZXB0aW9uKENhbGxGcmFtZSosIEpTVmFsdWUgZXhj
ZXB0aW9uVmFsdWUsIGJvb2wgaGFzQ2F0Y2hIYW5kbGVyKTsKICAgICB2b2lkIGF0U3RhdGVtZW50
KENhbGxGcmFtZSopOwogICAgIHZvaWQgY2FsbEV2ZW50KENhbGxGcmFtZSopOwogICAgIHZvaWQg
cmV0dXJuRXZlbnQoQ2FsbEZyYW1lKik7CkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhKU0dsb2JhbE9iamVj
dCopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUJyZWFrcG9pbnRI
aXQoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBCcmVha3BvaW50JikgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIGhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlvbihFeGVjU3RhdGUqLCBKU1Zh
bHVlIGV4Y2VwdGlvbikgY29uc3QgeyBVTlVTRURfUEFSQU0oZXhjZXB0aW9uKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24oRXhlY1N0YXRl
KiwgRXhjZXB0aW9uKikgY29uc3QgeyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBhdXNlKEpT
R2xvYmFsT2JqZWN0KiwgUmVhc29uRm9yUGF1c2UpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyRXZhbEVuYWJsZXIuaCIKICNpbmNsdWRl
ICJEZWJ1Z2dlclNjb3BlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaCIKQEAgLTE3Niw3ICsxNzcsNyBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZy
YW1lOjp0aGlzVmFsdWUoKSBjCiB9CiAKIC8vIEV2YWx1YXRlIHNvbWUgSmF2YVNjcmlwdCBjb2Rl
IGluIHRoZSBzY29wZSBvZiB0aGlzIGZyYW1lLgotSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6
ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIEpTVmFsdWUmIGV4Y2VwdGlvbikKK0pTVmFs
dWUgRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBFeGNl
cHRpb24qJiBleGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBtX2NhbGxGcmFtZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCShyZXZpc2lvbiAxODUxMTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IERlYnVnZ2VyU2NvcGU7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiB0eXBl
ZGVmIEV4ZWNTdGF0ZSBDYWxsRnJhbWU7CiAKQEAgLTY2LDcgKzY3LDcgQEAgcHVibGljOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBmdW5jdGlvbk5hbWUoKSBjb25zdDsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBUeXBlIHR5cGUoKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBK
U1ZhbHVlIHRoaXNWYWx1ZSgpIGNvbnN0OwotICAgIEpTVmFsdWUgZXZhbHVhdGUoY29uc3QgU3Ry
aW5nJiwgSlNWYWx1ZSYgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0
cmluZyYsIEV4Y2VwdGlvbiomKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9jYWxsRnJhbWU7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGludmFsaWRhdGUo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5LDkgKzEzOSw5IEBAIERlcHJlY2F0ZWQ6OlNjcmlwdE9iamVjdCBJbmpl
Y3RlZFNjcmlwdE0KICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NyaXB0U3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBKU1ZhbHVlIGdsb2JhbFRoaXNWYWx1ZSA9
IHNjcmlwdFN0YXRlLT5nbG9iYWxUaGlzVmFsdWUoKTsKIAotICAgIEpTVmFsdWUgZXZhbHVhdGlv
bkV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV2YWx1YXRpb25FeGNlcHRpb247CiAgICAgSW5z
cGVjdG9yRXZhbHVhdGVIYW5kbGVyIGV2YWx1YXRlSGFuZGxlciA9IG1fZW52aXJvbm1lbnQuZXZh
bHVhdGVIYW5kbGVyKCk7Ci0gICAgSlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gZXZhbHVhdGVIYW5k
bGVyKHNjcmlwdFN0YXRlLCBzb3VyY2VDb2RlLCBnbG9iYWxUaGlzVmFsdWUsICZldmFsdWF0aW9u
RXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBldmFsdWF0ZUhhbmRsZXIo
c2NyaXB0U3RhdGUsIHNvdXJjZUNvZGUsIGdsb2JhbFRoaXNWYWx1ZSwgZXZhbHVhdGlvbkV4Y2Vw
dGlvbik7CiAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgIHJldHVybiBEZXBy
ZWNhdGVkOjpTY3JpcHRPYmplY3QoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9u
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMyArMzMsMTQgQEAgY2xhc3MgU3RvcHdhdGNo
OwogfQogCiBuYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIFNvdXJjZUNv
ZGU7CiB9CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIEpTQzo6SlNWYWx1ZSAo
Kkluc3BlY3RvckZ1bmN0aW9uQ2FsbEhhbmRsZXIpKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IEpT
Qzo6Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6
OkFyZ0xpc3QmIGFyZ3MsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKTsKLXR5cGVkZWYgSlNDOjpK
U1ZhbHVlICgqSW5zcGVjdG9yRXZhbHVhdGVIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6U291cmNlQ29kZSYsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6SlNWYWx1ZSog
ZXhjZXB0aW9uKTsKK3R5cGVkZWYgSlNDOjpKU1ZhbHVlICgqSW5zcGVjdG9yRnVuY3Rpb25DYWxs
SGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEs
IEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpF
eGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbik7Cit0eXBlZGVmIEpTQzo6SlNWYWx1ZSAoKklu
c3BlY3RvckV2YWx1YXRlSGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJj
ZUNvZGUmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkV4Y2VwdGlvbiomIHJldHVybmVk
RXhjZXB0aW9uKTsKIAogY2xhc3MgSW5zcGVjdG9yRW52aXJvbm1lbnQgewogcHVibGljOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdElu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW5jbHVkZSAiQ29tcGxldGlvbi5oIgogI2luY2x1ZGUgIkNvbnNvbGVNZXNzYWdlLmgiCiAjaW5j
bHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5j
bHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKQEAgLTE4OCw3ICsxODksNyBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6CiAjZW5kaWYKIH0KIAotdm9p
ZCBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6OnJlcG9ydEFQSUV4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXhjZXB0aW9uKQordm9pZCBKU0dsb2JhbE9iamVjdElu
c3BlY3RvckNvbnRyb2xsZXI6OnJlcG9ydEFQSUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4
Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNl
cHRpb24oZXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAxLDcgKzIwMiw3IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjoKIAogICAgIC8vIEZJWE1FOiA8
aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNwZWN0b3I6IFNob3VsZCBub3QgZXZh
bHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCiAgICAgLy8gSWYgdGhpcyBpcyBh
IGN1c3RvbSBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRvIHRyeSBhbmQg
Z2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRpb24uCi0gICAg
U3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAg
IGlmIChKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OmxvZ1RvU3lzdGVtQ29uc29sZSgpKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmgJKHJldmlzaW9uIDE4
NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJ
bnNwZWN0b3JDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgY2xh
c3MgU3RvcHdhdGNoOwogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENvbnNvbGVDbGllbnQ7Citj
bGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsK
IGNsYXNzIEpTVmFsdWU7CkBAIC04MSw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElu
Y2x1ZGVzTmF0aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4Y2VwdGlvbnMoYm9vbCBpbmNsdWRl
c05hdGl2ZUNhbGxTdGFjaykgeyBtX2luY2x1ZGVOYXRpdmVDYWxsU3RhY2tXaXRoRXhjZXB0aW9u
cyA9IGluY2x1ZGVzTmF0aXZlQ2FsbFN0YWNrOyB9CiAKICAgICB2b2lkIHBhdXNlKCk7Ci0gICAg
dm9pZCByZXBvcnRBUElFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhj
ZXB0aW9uKTsKKyAgICB2b2lkIHJlcG9ydEFQSUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RXhjZXB0aW9uKik7CiAKICAgICBKU0M6OkNvbnNvbGVDbGllbnQqIGNvbnNvbGVDbGllbnQo
KSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmgJKHJldmlz
aW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxP
YmplY3RTY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBA
IHByaXZhdGU6CiAgICAgLy8gTk9URTogQ3VycmVudGx5IGFsbCBleGNlcHRpb25zIGFyZSByZXBv
cnRlZCBhdCB0aGUgQVBJIGJvdW5kYXJ5IHRocm91Z2ggcmVwb3J0QVBJRXhjZXB0aW9uLgogICAg
IC8vIFVudGlsIGEgdGltZSBjb21lcyB3aGVyZSBhbiBleGNlcHRpb24gY2FuIGJlIGNhdXNlZCBv
dXRzaWRlIG9mIHRoZSBBUEkgKGUuZy4gc2V0VGltZW91dAogICAgIC8vIG9yIHNvbWUgb3RoZXIg
YXN5bmMgb3BlcmF0aW9uIGluIGEgcHVyZSBKU0NvbnRleHQpIHdlIGNhbiBpZ25vcmUgZXhjZXB0
aW9ucyByZXBvcnRlZCBoZXJlLgotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZpcnR1
YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiop
IGNvbnN0IG92ZXJyaWRlIHsgfQogCiAgICAgTGlzdGVuZXJTZXQgbV9saXN0ZW5lcnM7CiAgICAg
SlNDOjpKU0dsb2JhbE9iamVjdCYgbV9nbG9iYWxPYmplY3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKICNpbmNsdWRlICJFcnJvci5oIgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJK
U0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBl
LmgiCkBAIC03NSw3ICs3Niw3IEBAIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6fkpTSmF2YVNjcmlw
dENhbGwKIAogSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2Vw
dGlvbjsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwoKS5ldmFsdWF0ZShleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIGV4Y2VwdGlvbik7CiAgICAgaWYgKGV4
Y2VwdGlvbikKICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRp
b24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2Fs
bEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
YXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5
R2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+dm1FbnRy
eUdsb2JhbE9iamVjdCgpOyB9CiAKICAgICBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7IH0KLSAgICBKU0M6OkpT
VmFsdWUgZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIEpTQzo6SlNWYWx1ZSYgZXhjZXB0
aW9uKSBjb25zdCAgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoc2NyaXB0
LCBleGNlcHRpb24pOyB9CisgICAgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0cmluZyYg
c2NyaXB0LCBKU0M6OkV4Y2VwdGlvbiomIGV4Y2VwdGlvbikgY29uc3QgIHsgcmV0dXJuIG1fZGVi
dWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKHNjcmlwdCwgZXhjZXB0aW9uKTsgfQogCiBwcml2YXRl
OgogICAgIEphdmFTY3JpcHRDYWxsRnJhbWUoUGFzc1JlZlB0cjxKU0M6OkRlYnVnZ2VyQ2FsbEZy
YW1lPik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxT
dGFja0ZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJTY3JpcHRDYWxsU3Rh
Y2tGYWN0b3J5LmgiCiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIlNjcmlwdEFyZ3VtZW50cy5oIgpAQCAtMTI4LDEwICsxMjksMTAgQEAgc3RhdGlj
IHZvaWQgZXh0cmFjdFNvdXJjZUluZm9ybWF0aW9uRnJvbQogICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CiB9CiAKLVBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxs
U3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUmIGV4
Y2VwdGlvbiwgc2l6ZV90IG1heFN0YWNrU2l6ZSkKK1Bhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNr
PiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uLCBzaXplX3QgbWF4U3RhY2tTaXplKQogewogICAg
IFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+IGZyYW1lczsKLSAgICBSZWZDb3VudGVkQXJyYXk8U3Rh
Y2tGcmFtZT4gc3RhY2tUcmFjZSA9IGV4ZWMtPnZtKCkuZXhjZXB0aW9uU3RhY2soKTsKKyAgICBS
ZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZSA9IGV4Y2VwdGlvbi0+c3RhY2so
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpICYmIGkgPCBt
YXhTdGFja1NpemU7IGkrKykgewogICAgICAgICB1bnNpZ25lZCBsaW5lOwogICAgICAgICB1bnNp
Z25lZCBjb2x1bW47CkBAIC0xNDEsOCArMTQyLDggQEAgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3Rh
Y2s+IGNyZWF0ZVNjcmlwdAogICAgIH0KIAogICAgIC8vIEZhbGxiYWNrIHRvIGdldHRpbmcgYXQg
bGVhc3QgdGhlIGxpbmUgYW5kIHNvdXJjZVVSTCBmcm9tIHRoZSBleGNlcHRpb24gb2JqZWN0IGlm
IGl0IGhhcyB2YWx1ZXMgYW5kIHRoZSBleGNlcHRpb25TdGFjayBkb2Vzbid0LgotICAgIEpTT2Jq
ZWN0KiBleGNlcHRpb25PYmplY3QgPSBleGNlcHRpb24udG9PYmplY3QoZXhlYyk7Ci0gICAgaWYg
KGV4Y2VwdGlvbi5pc09iamVjdCgpKSB7CisgICAgaWYgKGV4Y2VwdGlvbi0+dmFsdWUoKS5pc09i
amVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3QgPSBleGNlcHRpb24t
PnZhbHVlKCkudG9PYmplY3QoZXhlYyk7CiAgICAgICAgIGludCBsaW5lTnVtYmVyOwogICAgICAg
ICBpbnQgY29sdW1uTnVtYmVyOwogICAgICAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJMOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0
b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3Jp
cHRDYWxsU3RhY2tGYWN0b3J5LmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNl
IEpTQyB7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBKU1ZhbHVl
OwogfQpAQCAtNDcsNyArNDgsNyBAQCBjbGFzcyBTY3JpcHRDYWxsU3RhY2s7CiAvLyBGSVhNRTog
VGhlIHN1YnRsZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZXNlIHNob3VsZCBiZSBlbGltaW5hdGVk
LgogSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNj
cmlwdENhbGxTdGFjayhKU0M6OkV4ZWNTdGF0ZSosIHNpemVfdCBtYXhTdGFja1NpemUpOwogSlNf
RVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdENh
bGxTdGFja0ZvckNvbnNvbGUoSlNDOjpFeGVjU3RhdGUqLCBzaXplX3QgbWF4U3RhY2tTaXplKTsK
LUpTX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3Jp
cHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlJiBl
eGNlcHRpb24sIHNpemVfdCBtYXhTdGFja1NpemUpOworSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1Jl
ZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiosIHNpemVfdCBtYXhTdGFja1NpemUpOwog
SlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGNyZWF0ZVNjcmlw
dEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KTsK
IAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkRlYnVn
Z2VyQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJTY29wZS5oIgorI2luY2x1ZGUgIkV4
Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTSmF2YVNjcmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IkpTTG9jay5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKQEAgLTkzLDcgKzk0
LDcgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3BvaQogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBTY3JpcHRCcmVha3BvaW50QWN0aW9uVHlwZUV2YWx1YXRl
OiB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgICAgICBFeGNlcHRpb24qIGV4Y2Vw
dGlvbjsKICAgICAgICAgZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKGJyZWFrcG9pbnRBY3Rp
b24uZGF0YSwgZXhjZXB0aW9uKTsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAg
IHJlcG9ydEV4Y2VwdGlvbihkZWJ1Z2dlckNhbGxGcmFtZS0+ZXhlYygpLCBleGNlcHRpb24pOwpA
QCAtMTAzLDEzICsxMDQsMTMgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVh
a3BvaQogICAgICAgICBkaXNwYXRjaEJyZWFrcG9pbnRBY3Rpb25Tb3VuZChkZWJ1Z2dlckNhbGxG
cmFtZS0+ZXhlYygpLCBicmVha3BvaW50QWN0aW9uLmlkZW50aWZpZXIpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlUHJvYmU6IHsKLSAgICAgICAg
SlNWYWx1ZSBleGNlcHRpb247CisgICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uOwogICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGRlYnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0ZShicmVha3BvaW50
QWN0aW9uLmRhdGEsIGV4Y2VwdGlvbik7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAg
ICAgICByZXBvcnRFeGNlcHRpb24oZGVidWdnZXJDYWxsRnJhbWUtPmV4ZWMoKSwgZXhjZXB0aW9u
KTsKICAgICAgICAgCiAgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSA9IGRlYnVnZ2VyQ2Fs
bEZyYW1lLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB3cmFwcGVkUmVzdWx0ID0gRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUoc3RhdGUtPnZtKCksIGV4Y2VwdGlvbiA/IGV4Y2VwdGlvbiA6IHJlc3VsdCk7CisgICAg
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHdyYXBwZWRSZXN1bHQgPSBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZShzdGF0ZS0+dm0oKSwgZXhjZXB0aW9uID8gZXhjZXB0aW9uLT52YWx1ZSgpIDog
cmVzdWx0KTsKICAgICAgICAgZGlzcGF0Y2hCcmVha3BvaW50QWN0aW9uUHJvYmUoc3RhdGUsIGJy
ZWFrcG9pbnRBY3Rpb24sIHdyYXBwZWRSZXN1bHQpOwogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0zMDIsNyArMzAzLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlQnJlYWtwb2lu
dAogICAgIH0KIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlRXhjZXB0aW9uSW5C
cmVha3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZXhj
ZXB0aW9uKSBjb25zdAordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlRXhjZXB0aW9uSW5C
cmVha3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkV4Y2VwdGlvbiog
ZXhjZXB0aW9uKSBjb25zdAogewogICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24p
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1Nl
cnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2Ny
aXB0RGVidWdTZXJ2ZXIuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoSlNDOjpK
U0dsb2JhbE9iamVjdCopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcnVuRXZlbnRMb29wV2hpbGVQ
YXVzZWQoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudFNjcmlwdChKU0M6OkV4ZWNT
dGF0ZSopIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJl
cG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKikgY29uc3QgPSAw
OwogCiAgICAgYm9vbCBldmFsdWF0ZUJyZWFrcG9pbnRBY3Rpb24oY29uc3QgU2NyaXB0QnJlYWtw
b2ludEFjdGlvbiYpOwogCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgc291cmNlUGFyc2VkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpTb3VyY2VQcm92aWRlcios
IGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNc2cpIG92ZXJyaWRlIGZpbmFsOwog
ICAgIHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhKU0M6OkpTR2xvYmFsT2JqZWN0Kikg
b3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVC
cmVha3BvaW50SGl0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OkJyZWFrcG9pbnQm
KSBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXhjZXB0aW9uSW5CcmVh
a3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbikg
Y29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV4Y2VwdGlvbklu
QnJlYWtwb2ludENvbmRpdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKikgY29u
c3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBhdXNlKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkRlYnVnZ2VyOjpSZWFzb25Gb3JQYXVzZSkgb3ZlcnJpZGUgZmlu
YWw7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMo
KSBvdmVycmlkZSBmaW5hbDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSAr
MjQsMTEgQEAKICNkZWZpbmUgQ2FsbEZyYW1lX2gKIAogI2luY2x1ZGUgIkFic3RyYWN0UEMuaCIK
LSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUgIlN0YWNr
VmlzaXRvci5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgog
CiBuYW1lc3BhY2UgSlNDICB7CkBAIC03NSwxMyArNzUsOSBAQCBuYW1lc3BhY2UgSlNDICB7CiAg
ICAgICAgIC8vIEJ1dCB0aGV5J3JlIHVzZWQgaW4gbWFueSBwbGFjZXMgaW4gbGVnYWN5IGNvZGUs
IHNvIHRoZXkncmUgbm90IGdvaW5nIGF3YXkgYW55IHRpbWUgc29vbi4KIAogICAgICAgICB2b2lk
IGNsZWFyRXhjZXB0aW9uKCkgeyB2bSgpLmNsZWFyRXhjZXB0aW9uKCk7IH0KLSAgICAgICAgdm9p
ZCBjbGVhclN1cHBsZW1lbnRhcnlFeGNlcHRpb25JbmZvKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgdm0oKS5jbGVhckV4Y2VwdGlvblN0YWNrKCk7Ci0gICAgICAgIH0KIAotICAgICAgICBKU1Zh
bHVlIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIHZtKCkuZXhjZXB0aW9uKCk7IH0KLSAgICAg
ICAgYm9vbCBoYWRFeGNlcHRpb24oKSBjb25zdCB7IHJldHVybiAhdm0oKS5leGNlcHRpb24oKS5p
c0VtcHR5KCk7IH0KKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKSBjb25zdCB7IHJldHVy
biB2bSgpLmV4Y2VwdGlvbigpOyB9CisgICAgICAgIGJvb2wgaGFkRXhjZXB0aW9uKCkgY29uc3Qg
eyByZXR1cm4gISF2bSgpLmV4Y2VwdGlvbigpOyB9CiAKICAgICAgICAgQXRvbWljU3RyaW5nVGFi
bGUqIGF0b21pY1N0cmluZ1RhYmxlKCkgY29uc3QgeyByZXR1cm4gdm0oKS5hdG9taWNTdHJpbmdU
YWJsZSgpOyB9CiAgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVz
KCkgY29uc3QgeyByZXR1cm4gKnZtKCkucHJvcGVydHlOYW1lczsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lv
biAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiRGVidWdn
ZXJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJFcnJvckluc3RhbmNlLmgiCiAjaW5jbHVkZSAiRXZh
bENvZGVDYWNoZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJKU0FycmF5
LmgiCkBAIC00MzUsNyArNDM2LDcgQEAgc3RhdGljIGJvb2wgdW53aW5kQ2FsbEZyYW1lKFN0YWNr
VmlzaXRvcgogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gdmlzaXRvci0+Y2FsbEZyYW1l
KCk7CiAgICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2Jh
bE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7Ci0gICAgICAgIENsZWFyRXhjZXB0aW9uU2NvcGUgc2Nv
cGUoJmNhbGxGcmFtZS0+dm0oKSk7CisgICAgICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZSBzY29w
ZSgmY2FsbEZyYW1lLT52bSgpKTsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkpKQogICAgICAgICAgICAgZGVidWdnZXItPnJldHVybkV2
ZW50KGNhbGxGcmFtZSk7CiAgICAgICAgIGVsc2UKQEAgLTU4Myw5ICs1ODQsOSBAQCBKU1N0cmlu
ZyogSW50ZXJwcmV0ZXI6OnN0YWNrVHJhY2VBc1N0cmluCiAgICAgcmV0dXJuIGpzU3RyaW5nKCZl
eGVjLT52bSgpLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCi1jbGFzcyBHZXRFeGNlcHRpb25I
YW5kbGVyRnVuY3RvciB7CitjbGFzcyBHZXRDYXRjaEhhbmRsZXJGdW5jdG9yIHsKIHB1YmxpYzoK
LSAgICBHZXRFeGNlcHRpb25IYW5kbGVyRnVuY3RvcigpCisgICAgR2V0Q2F0Y2hIYW5kbGVyRnVu
Y3RvcigpCiAgICAgICAgIDogbV9oYW5kbGVyKDApCiAgICAgewogICAgIH0KQEAgLTU5OSw3ICs2
MDAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51
ZTsKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHZpc2l0b3ItPmJ5dGVjb2Rl
T2Zmc2V0KCk7Ci0gICAgICAgIG1faGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgY29uc3QgYm9vbCBSZXF1aXJlQ2F0
Y2hIYW5kbGVyID0gdHJ1ZTsKKyAgICAgICAgbV9oYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVy
Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVDYXRjaEhhbmRsZXIpOwog
ICAgICAgICBpZiAobV9oYW5kbGVyKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6
RG9uZTsKIApAQCAtNjQ5LDExICs2NTEsMTIgQEAgcHJpdmF0ZToKICAgICBIYW5kbGVySW5mbyom
IG1faGFuZGxlcjsKIH07CiAKLU5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6
OnVud2luZChWTUVudHJ5RnJhbWUqJiB2bUVudHJ5RnJhbWUsIENhbGxGcmFtZSomIGNhbGxGcmFt
ZSwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUpCitORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIElu
dGVycHJldGVyOjp1bndpbmQoVk1FbnRyeUZyYW1lKiYgdm1FbnRyeUZyYW1lLCBDYWxsRnJhbWUq
JiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBib29sIGlzVGVybWluYXRpb24g
PSBmYWxzZTsKIAorICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGNlcHRpb24tPnZhbHVl
KCk7CiAgICAgQVNTRVJUKCFleGNlcHRpb25WYWx1ZS5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCgh
ZXhjZXB0aW9uVmFsdWUuaXNDZWxsKCkgfHwgZXhjZXB0aW9uVmFsdWUuYXNDZWxsKCkpOwogICAg
IC8vIFRoaXMgc2hvdWxkbid0IGJlIHBvc3NpYmxlIChoZW5jZSB0aGUgYXNzZXJ0aW9ucyksIGJ1
dCB3ZSdyZSBhbHJlYWR5IGluIHRoZSBzbG93ZXN0IG9mCkBAIC02NjIsMzIgKzY2NSwzNSBAQCBO
RVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1CiAgICAgICAgIGV4Y2VwdGlv
blZhbHVlID0ganNOdWxsKCk7CiAKICAgICBpZiAoZXhjZXB0aW9uVmFsdWUuaXNPYmplY3QoKSkK
LSAgICAgICAgaXNUZXJtaW5hdGlvbiA9IGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihh
c09iamVjdChleGNlcHRpb25WYWx1ZSkpOworICAgICAgICBpc1Rlcm1pbmF0aW9uID0gaXNUZXJt
aW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbik7CiAKLSAgICBBU1NFUlQoY2FsbEZy
YW1lLT52bSgpLmV4Y2VwdGlvblN0YWNrKCkuc2l6ZSgpKTsKKyAgICBBU1NFUlQoY2FsbEZyYW1l
LT52bSgpLmV4Y2VwdGlvbigpICYmIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKS0+c3RhY2so
KS5zaXplKCkpOwogCiAgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVudHJ5
R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7Ci0gICAgaWYgKGRlYnVnZ2VyICYmIGRlYnVnZ2Vy
LT5uZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcygpKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gY2xl
YXIgdGhlIGV4Y2VwdGlvbiBhbmQgdGhlIGV4Y2VwdGlvbiBzdGFjayBoZXJlIGluIG9yZGVyIHRv
IHNlZSBpZiBhIG5ldyBleGNlcHRpb24gaGFwcGVucy4KKyAgICBpZiAoZGVidWdnZXIgJiYgZGVi
dWdnZXItPm5lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKCkgJiYgIWV4Y2VwdGlvbi0+ZGlkTm90aWZ5
SW5zcGVjdG9yT2ZUaHJvdygpKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgdGhlIGV4
Y2VwdGlvbiBoZXJlIGluIG9yZGVyIHRvIHNlZSBpZiBhIG5ldyBleGNlcHRpb24gaGFwcGVucy4K
ICAgICAgICAgLy8gQWZ0ZXJ3YXJkcywgdGhlIHZhbHVlcyBhcmUgcHV0IGJhY2sgdG8gY29udGlu
dWUgcHJvY2Vzc2luZyB0aGlzIGVycm9yLgotICAgICAgICBDbGVhckV4Y2VwdGlvblNjb3BlIHNj
b3BlKCZjYWxsRnJhbWUtPnZtKCkpOworICAgICAgICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgc2Nv
cGUoJmNhbGxGcmFtZS0+dm0oKSk7CiAgICAgICAgIC8vIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQg
aWYgdGhlIGRlYnVnZ2VyIGlzIGVuYWJsZWQgdGhlbiB0aGVyZSBpcyBubyBpbmxpbmluZy4KICAg
ICAgICAgLy8gSWYgdGhhdCBhc3N1bXB0aW9uIHR1cm5zIG91dCB0byBiZSBmYWxzZSB0aGVuIHdl
J2xsIGlnbm9yZSB0aGUgaW5saW5lZCBjYWxsCiAgICAgICAgIC8vIGZyYW1lcy4KICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTc1NAogCi0gICAg
ICAgIGJvb2wgaGFzSGFuZGxlcjsKKyAgICAgICAgYm9vbCBoYXNDYXRjaEhhbmRsZXI7CiAgICAg
ICAgIGlmIChpc1Rlcm1pbmF0aW9uKQotICAgICAgICAgICAgaGFzSGFuZGxlciA9IGZhbHNlOwor
ICAgICAgICAgICAgaGFzQ2F0Y2hIYW5kbGVyID0gZmFsc2U7CiAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgR2V0RXhjZXB0aW9uSGFuZGxlckZ1bmN0b3IgZnVuY3RvcjsKKyAgICAgICAgICAg
IEdldENhdGNoSGFuZGxlckZ1bmN0b3IgZnVuY3RvcjsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+
aXRlcmF0ZShmdW5jdG9yKTsKLSAgICAgICAgICAgIGhhc0hhbmRsZXIgPSAhIWZ1bmN0b3IuaGFu
ZGxlcigpOworICAgICAgICAgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSBmdW5jdG9yLmhhbmRs
ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCghaGFuZGxlciB8fCBoYW5kbGVyLT5pc0NhdGNoSGFu
ZGxlcigpKTsKKyAgICAgICAgICAgIGhhc0NhdGNoSGFuZGxlciA9ICEhaGFuZGxlcjsKICAgICAg
ICAgfQogCi0gICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25W
YWx1ZSwgaGFzSGFuZGxlcik7CisgICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oY2FsbEZyYW1l
LCBleGNlcHRpb25WYWx1ZSwgaGFzQ2F0Y2hIYW5kbGVyKTsKICAgICAgICAgQVNTRVJUKCFjYWxs
RnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKICAgICB9CisgICAgZXhjZXB0aW9uLT5zZXREaWROb3Rp
ZnlJbnNwZWN0b3JPZlRocm93KCk7CiAKICAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhh
bmRsZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgogICAgIEhhbmRs
ZXJJbmZvKiBoYW5kbGVyID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
OTgsMjAgKzk4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGV4cHJlc3Npb25J
bmZvKGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25l
ZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbik7CiAgICAgfTsKIAotICAgIGNsYXNzIENsZWFyRXhj
ZXB0aW9uU2NvcGUgeworICAgIGNsYXNzIFN1c3BlbmRFeGNlcHRpb25TY29wZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBDbGVhckV4Y2VwdGlvblNjb3BlKFZNKiB2bSk6IG1fdm0odm0pCisgICAg
ICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZShWTSogdm0pCisgICAgICAgICAgICA6IG1fdm0odm0p
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHZtLT5nZXRFeGNlcHRpb25JbmZvKG9sZEV4Y2VwdGlv
biwgb2xkRXhjZXB0aW9uU3RhY2spOworICAgICAgICAgICAgb2xkRXhjZXB0aW9uID0gdm0tPmV4
Y2VwdGlvbigpOwogICAgICAgICAgICAgdm0tPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIH0K
LSAgICAgICAgfkNsZWFyRXhjZXB0aW9uU2NvcGUoKQorICAgICAgICB+U3VzcGVuZEV4Y2VwdGlv
blNjb3BlKCkKICAgICAgICAgewotICAgICAgICAgICAgbV92bS0+c2V0RXhjZXB0aW9uSW5mbyhv
bGRFeGNlcHRpb24sIG9sZEV4Y2VwdGlvblN0YWNrKTsKKyAgICAgICAgICAgIG1fdm0tPnNldEV4
Y2VwdGlvbihvbGRFeGNlcHRpb24pOwogICAgICAgICB9CiAgICAgcHJpdmF0ZToKLSAgICAgICAg
SlNDOjpKU1ZhbHVlIG9sZEV4Y2VwdGlvbjsKLSAgICAgICAgUmVmQ291bnRlZEFycmF5PEpTQzo6
U3RhY2tGcmFtZT4gb2xkRXhjZXB0aW9uU3RhY2s7CisgICAgICAgIEV4Y2VwdGlvbiogb2xkRXhj
ZXB0aW9uOwogICAgICAgICBWTSogbV92bTsKICAgICB9OwogICAgIApAQCAtMjE1LDcgKzIxNSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgU2FtcGxpbmdUb29sKiBzYW1w
bGVyKCkgeyByZXR1cm4gbV9zYW1wbGVyLmdldCgpOyB9CiAKLSAgICAgICAgTkVWRVJfSU5MSU5F
IEhhbmRsZXJJbmZvKiB1bndpbmQoVk1FbnRyeUZyYW1lKiYsIENhbGxGcmFtZSomLCBKU1ZhbHVl
Jik7CisgICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdW53aW5kKFZNRW50cnlGcmFt
ZSomLCBDYWxsRnJhbWUqJiwgRXhjZXB0aW9uKik7CiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lk
IGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9va0lEKTsKICAgICAgICAgSlNTdHJpbmcqIHN0YWNr
VHJhY2VBc1N0cmluZyhFeGVjU3RhdGUqLCBWZWN0b3I8U3RhY2tGcmFtZT4pOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lv
biAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw3ICsyMjMsNyBAQCBBc3NlbWJseUhlbHBlcnM6Okp1
bXAgQXNzZW1ibHlIZWxwZXJzOjplCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICByZXN1bHQgPSBi
cmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJv
LCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKICNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgcmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNl
cHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJl
dF9jYXN0PGNoYXIqPih2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZh
bHVlVGFnKSk7CisgICAgcmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25D
aGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZF
eGNlcHRpb24oKSksIFRydXN0ZWRJbW0zMigwKSk7CiAjZW5kaWYKICAgICAKICAgICBpZiAod2lk
dGggPT0gTm9ybWFsSnVtcFdpZHRoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNiArNDAs
MTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4
ZWNTdGF0ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlKQordm9pZCBnZW5lcmlj
VW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUpCiB7CiAgICAgaWYgKE9wdGlvbnM6
OmJyZWFrT25UaHJvdygpKSB7CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3
UG9pbnRlcihjYWxsRnJhbWUpLCAiIGZvciBjb2RlIGJsb2NrICIsICpjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLCAiXG4iKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAgICAgCi0gICAgUkVMRUFT
RV9BU1NFUlQoZXhjZXB0aW9uVmFsdWUpOworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gdm0t
PmV4Y2VwdGlvbigpOworICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2VwdGlvbik7CiAgICAgVk1FbnRy
eUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwotICAgIEhhbmRsZXJJ
bmZvKiBoYW5kbGVyID0gdm0tPmludGVycHJldGVyLT51bndpbmQodm1FbnRyeUZyYW1lLCBjYWxs
RnJhbWUsIGV4Y2VwdGlvblZhbHVlKTsgLy8gVGhpcyBtYXkgdXBkYXRlIHZtRW50cnlGcmFtZSBh
bmQgY2FsbEZyYW1lLgorICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gdm0tPmludGVycHJldGVy
LT51bndpbmQodm1FbnRyeUZyYW1lLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7IC8vIFRoaXMgbWF5
IHVwZGF0ZSB2bUVudHJ5RnJhbWUgYW5kIGNhbGxGcmFtZS4KIAogICAgIHZvaWQqIGNhdGNoUm91
dGluZTsKICAgICBJbnN0cnVjdGlvbiogY2F0Y2hQQ0ZvckludGVycHJldGVyID0gMDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCShyZXZpc2lvbiAxODUx
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEV4ZWNTdGF0
ZTsKIGNsYXNzIFZNOwogCi12b2lkIGdlbmVyaWNVbndpbmQoVk0qLCBFeGVjU3RhdGUqLCBKU1Zh
bHVlIGV4Y2VwdGlvblZhbHVlKTsKK3ZvaWQgZ2VuZXJpY1Vud2luZChWTSosIEV4ZWNTdGF0ZSop
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJEZWJ1
Z2dlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIK
ICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCkBAIC05Nyw3ICs5OCw3
IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYKICNlbmRpZiAvLyBD
UFUoWDg2KQogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGV4Y2VwdGlvbgotICAgIEp1bXAgc2F3RXhj
ZXB0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9j
YXN0PGNoYXIqPih2bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpOyAKKyAgICBKdW1wIHNhd0V4Y2VwdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3Modm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwgVHJ1c3RlZEltbTMyKDApKTsKIAog
ICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgLy8gUmV0dXJuLgpAQCAtODI5LDEzICs4
MzAsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogCiAgICAgLy8gTm93IHN0b3JlIHRoZSBleGNlcHRpb24gcmV0dXJuZWQgYnkgb3BlcmF0aW9u
VGhyb3cuCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKLSAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7Ci0gICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoSlNWYWx1ZSgpLnBheWxvYWQoKSksIEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRp
b25PZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkp
OwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWUoKS50YWcoKSksIEFkZHJlc3MocmVn
VDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZz
ZXQoKSksIHJlZ1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwg
cmVnVDEpOworCisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDMsIFZN
OjpleGNlcHRpb25PZmZzZXQoKSkpOwogCiAgICAgdW5zaWduZWQgZXhjZXB0aW9uID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBlbWl0U3RvcmUoZXhjZXB0aW9uLCByZWdU
MSwgcmVnVDApOworICAgIGVtaXRTdG9yZShleGNlcHRpb24sIHJlZ1QxLCByZWdUMik7CisKKyAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgRXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOworICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QyLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKKworICAgIHVuc2lnbmVkIHRocm93
blZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBlbWl0U3RvcmUo
dGhyb3duVmFsdWUsIHJlZ1QxLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgIkJhc2ljQmxvY2tMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkNv
cGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNp
bmNsdWRlICJKU0FycmF5LmgiCkBAIC01MjksNiArNTMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhj
ZXB0aW9uT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0
KCkpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOworCisgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIEV4Y2VwdGlvbjo6dmFsdWVP
ZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1t
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4MjMsNyArMTgyMyw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvdyhFeGVj
U3QKICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwogCiAgICAg
Ly8gUmVzdWx0cyBzdG9yZWQgb3V0LW9mLWJhbmQgaW4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhy
b3csIHZtLmNhbGxGcmFtZUZvclRocm93ICYgdm0udm1FbnRyeUZyYW1lRm9yVGhyb3cKLSAgICBn
ZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSk7CisgICAgZ2VuZXJpY1Vud2lu
ZCh2bSwgZXhlYyk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25GbHVzaFdyaXRl
QmFycmllckJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKQEAgLTE4NjIsMTEg
KzE4NjIsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5pdEdsb2JhbENvCiB2b2lk
IEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihWTSogdm0sIEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQot
ICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSB2bS0+ZXhjZXB0aW9uKCk7Ci0gICAgQVNTRVJU
KGV4Y2VwdGlvblZhbHVlKTsKLSAgICAKLSAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNl
cHRpb25WYWx1ZSk7CisgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CiAgICAgQVNTRVJUKHZt
LT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKQEAgLTE4NzcsMTEgKzE4NzMsNyBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlCiAgICAgQVNTRVJUKGNhbGxl
ckZyYW1lKTsKIAogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2
bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7Ci0KLSAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gdm0tPmV4Y2VwdGlvbigpOwotICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7Ci0gICAg
Ci0gICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbGVyRnJhbWUsIGV4Y2VwdGlvblZhbHVlKTsKKyAg
ICBnZW5lcmljVW53aW5kKHZtLCBjYWxsZXJGcmFtZSk7CiAgICAgQVNTRVJUKHZtLT50YXJnZXRN
YWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKQEAgLTE4ODksOCArMTg4MSw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WTUhhbmRsZUV4Y2UKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgIGdl
bmVyaWNVbndpbmQodm0sIGV4ZWMsIHZtLT5leGNlcHRpb24oKSk7CisgICAgZ2VuZXJpY1Vud2lu
ZCh2bSwgZXhlYyk7CiB9CiAKIC8vIFRoaXMgZnVuY3Rpb24gInNob3VsZCIganVzdCB0YWtlIHRo
ZSBFeGVjU3RhdGUqLCBidXQgZG9pbmcgc28gd291bGQgbWFrZSBpdCBtb3JlIGRpZmZpY3VsdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAko
cmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksOCArMzQ5LDggQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogI2Vsc2UKICAgICBKU0ludGVyZmFjZUpJVDo6
SnVtcCBleGNlcHRpb25IYW5kbGVyID0gaml0LmJyYW5jaDMyKAogICAgICAgICBKU0ludGVyZmFj
ZUpJVDo6Tm90RXF1YWwsCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpBYnNvbHV0ZUFkZHJlc3Mo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksCi0gICAgICAg
IEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwor
ICAgICAgICBKU0ludGVyZmFjZUpJVDo6QWJzb2x1dGVBZGRyZXNzKHZtLT5hZGRyZXNzT2ZFeGNl
cHRpb24oKSksCisgICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoMCkpOwogI2Vu
ZGlmCiAKICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCShy
ZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZz
ZXRzRXh0cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1
ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAi
RGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXhl
Y3V0YWJsZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc1LDggKzEzNzUsNyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV9kCiBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfaGFuZGxlX2V4Y2VwdGlvbikKIHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMo
KTsKLSAgICBBU1NFUlQodm0uZXhjZXB0aW9uKCkpOwotICAgIGdlbmVyaWNVbndpbmQoJnZtLCBl
eGVjLCB2bS5leGNlcHRpb24oKSk7CisgICAgZ2VuZXJpY1Vud2luZCgmdm0sIGV4ZWMpOwogICAg
IExMSU5UX0VORF9JTVBMKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAx
ODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNjkzLDcgKzY5Myw3IEBAIG1hY3JvIGJyYW5j
aElmRXhjZXB0aW9uKGxhYmVsKQogICAgIGxvYWRwIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2Zy
XSwgdDMKICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKICAgICBsb2FkcCBNYXJrZWRCbG9j
azo6bV93ZWFrU2V0ICsgV2Vha1NldDo6bV92bVt0M10sIHQzCi0gICAgYmllcSBWTTo6bV9leGNl
cHRpb24gKyBUYWdPZmZzZXRbdDNdLCBFbXB0eVZhbHVlVGFnLCAubm9FeGNlcHRpb24KKyAgICBi
dGl6IFZNOjptX2V4Y2VwdGlvblt0M10sIC5ub0V4Y2VwdGlvbgogICAgIGptcCBsYWJlbAogLm5v
RXhjZXB0aW9uOgogZW5kCkBAIC0xOTUyLDE1ICsxOTUyLDIwIEBAIF9sbGludF9vcF9jYXRjaDoK
ICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKIAogICAgIGxvYWRpIFZNOjp0YXJn
ZXRJbnRlcnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQwotICAgIGxvYWRpIFZNOjptX2V4Y2VwdGlv
biArIFBheWxvYWRPZmZzZXRbdDNdLCB0MAotICAgIGxvYWRpIFZNOjptX2V4Y2VwdGlvbiArIFRh
Z09mZnNldFt0M10sIHQxCi0gICAgc3RvcmVpIDAsIFZNOjptX2V4Y2VwdGlvbiArIFBheWxvYWRP
ZmZzZXRbdDNdCi0gICAgc3RvcmVpIEVtcHR5VmFsdWVUYWcsIFZNOjptX2V4Y2VwdGlvbiArIFRh
Z09mZnNldFt0M10KKyAgICBsb2FkaSBWTTo6bV9leGNlcHRpb25bdDNdLCB0MAorICAgIHN0b3Jl
aSAwLCBWTTo6bV9leGNlcHRpb25bdDNdCiAgICAgbG9hZGkgNFtQQ10sIHQyCiAgICAgc3RvcmVp
IHQwLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDIsIDhdCisgICAgc3RvcmVpIENlbGxUYWcsIFRhZ09m
ZnNldFtjZnIsIHQyLCA4XQorCisgICAgbG9hZGkgRXhjZXB0aW9uOjptX3ZhbHVlICsgVGFnT2Zm
c2V0W3QwXSwgdDEKKyAgICBsb2FkaSBFeGNlcHRpb246Om1fdmFsdWUgKyBQYXlsb2FkT2Zmc2V0
W3QwXSwgdDAKKyAgICBsb2FkaSA4W1BDXSwgdDIKKyAgICBzdG9yZWkgdDAsIFBheWxvYWRPZmZz
ZXRbY2ZyLCB0MiwgOF0KICAgICBzdG9yZWkgdDEsIFRhZ09mZnNldFtjZnIsIHQyLCA4XQorCiAg
ICAgdHJhY2VFeGVjdXRpb24oKSAgIyBUaGlzIG5lZWRzIHRvIGJlIGhlcmUgYmVjYXVzZSB3ZSBk
b24ndCB3YW50IHRvIGNsb2JiZXIgdDAsIHQxLCB0MiwgdDMgYWJvdmUuCi0gICAgZGlzcGF0Y2go
MikKKyAgICBkaXNwYXRjaCgzKQogCiBfbGxpbnRfb3BfZW5kOgogICAgIHRyYWNlRXhlY3V0aW9u
KCkKQEAgLTIwMzgsNyArMjA0Myw3IEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1
dGFibGVPZmYKICAgICBlbmQKICAgICAKICAgICBmdW5jdGlvbkVwaWxvZ3VlKCkKLSAgICBiaW5l
cSBWTTo6bV9leGNlcHRpb24gKyBUYWdPZmZzZXRbdDNdLCBFbXB0eVZhbHVlVGFnLCAuaGFuZGxl
RXhjZXB0aW9uCisgICAgYnRpbnogVk06Om1fZXhjZXB0aW9uW3QzXSwgLmhhbmRsZUV4Y2VwdGlv
bgogICAgIHJldAogCiAuaGFuZGxlRXhjZXB0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9u
IDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xODIwLDEyICsxODIwLDE4IEBAIF9sbGludF9v
cF9jYXRjaDoKICAgICBsb2FkcCBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93W3QzXSwg
UEMKICAgICBzdWJwIFBCLCBQQwogICAgIHJzaGlmdHAgMywgUEMKKwogICAgIGxvYWRxIFZNOjpt
X2V4Y2VwdGlvblt0M10sIHQwCiAgICAgc3RvcmVxIDAsIFZNOjptX2V4Y2VwdGlvblt0M10KICAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDIpCiAgICAgc3RvcmVxIHQwLCBbY2ZyLCB0Miwg
OF0KKworICAgIGxvYWRxIEV4Y2VwdGlvbjo6bV92YWx1ZVt0MF0sIHQzCisgICAgbG9hZGlzRnJv
bUluc3RydWN0aW9uKDIsIHQyKQorICAgIHN0b3JlcSB0MywgW2NmciwgdDIsIDhdCisKICAgICB0
cmFjZUV4ZWN1dGlvbigpCi0gICAgZGlzcGF0Y2goMikKKyAgICBkaXNwYXRjaCgzKQogCiAKIF9s
bGludF9vcF9lbmQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25z
dHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxMSwxMCAr
ODExLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgVHJ5
Tm9kZTo6VHJ5Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBTdGF0ZW1lbnRO
b2RlKiB0cnlCbG9jaywgY29uc3QgSWRlbnRpZmllciYgZXhjZXB0aW9uSWRlbnQsIFN0YXRlbWVu
dE5vZGUqIGNhdGNoQmxvY2ssIFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jaykKKyAgICBpbmxp
bmUgVHJ5Tm9kZTo6VHJ5Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBTdGF0
ZW1lbnROb2RlKiB0cnlCbG9jaywgY29uc3QgSWRlbnRpZmllciYgdGhyb3duVmFsdWVJZGVudCwg
U3RhdGVtZW50Tm9kZSogY2F0Y2hCbG9jaywgU3RhdGVtZW50Tm9kZSogZmluYWxseUJsb2NrKQog
ICAgICAgICA6IFN0YXRlbWVudE5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV90cnlCbG9jayh0
cnlCbG9jaykKLSAgICAgICAgLCBtX2V4Y2VwdGlvbklkZW50KGV4Y2VwdGlvbklkZW50KQorICAg
ICAgICAsIG1fdGhyb3duVmFsdWVJZGVudCh0aHJvd25WYWx1ZUlkZW50KQogICAgICAgICAsIG1f
Y2F0Y2hCbG9jayhjYXRjaEJsb2NrKQogICAgICAgICAsIG1fZmluYWxseUJsb2NrKGZpbmFsbHlC
bG9jaykKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZp
c2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE1MTEsNyArMTUxMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKSBvdmVycmlkZTsKIAogICAgICAgICBTdGF0ZW1lbnROb2RlKiBtX3RyeUJsb2NrOwot
ICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBtX2V4Y2VwdGlvbklkZW50OworICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBtX3Rocm93blZhbHVlSWRlbnQ7CiAgICAgICAgIFN0YXRlbWVudE5vZGUq
IG1fY2F0Y2hCbG9jazsKICAgICAgICAgU3RhdGVtZW50Tm9kZSogbV9maW5hbGx5QmxvY2s7CiAg
ICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAJ
KHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkNhbGxEYXRhLmgiCiAKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0Z1bmN0aW9uLmgiCkBAIC0zOSwxNSArNDAsMTUgQEAgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBmdQogICAgIHJldHVybiBleGVjLT5pbnRlcnByZXRlcigpLT5leGVj
dXRlQ2FsbChleGVjLCBhc09iamVjdChmdW5jdGlvbk9iamVjdCksIGNhbGxUeXBlLCBjYWxsRGF0
YSwgdGhpc1ZhbHVlLCBhcmdzKTsKIH0KIAotSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRh
JiBjYWxsRGF0YSwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIEpTVmFs
dWUqIGV4Y2VwdGlvbikKK0pTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVu
Y3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBFeGNlcHRpb24qJiByZXR1
cm5lZEV4Y2VwdGlvbikKIHsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rp
b25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAg
ICAgICpleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuZWRFeGNl
cHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQorICAgIH0gZWxzZQorICAg
ICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IG51bGxwdHI7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FsbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWxsRGF0YS5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWxsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQXJnTGlzdDsKK2NsYXNzIEV4Y2VwdGlvbjsKIGNs
YXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKIGNsYXNzIEpTT2JqZWN0
OwpAQCAtNTgsNyArNTksNyBAQCB1bmlvbiBDYWxsRGF0YSB7CiB9OwogCiBKU19FWFBPUlRfUFJJ
VkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2Fs
bFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KTsKLUpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqLCBKU1ZhbHVlIGZ1
bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUqIGV4Y2VwdGlvbik7CitKU19FWFBPUlRfUFJJVkFU
RSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5
cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmLCBF
eGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJDYWxsRnJh
bWUuaCIKICNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCkBAIC02MCwxOSArNjEs
MTggQEAgYm9vbCBjaGVja1N5bnRheChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZAogICAgICAgICBK
U1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdCwgSlNQYXJzZXJDb2RlVHlwZTo6UHJvZ3JhbSwg
ZXJyb3IpOwogfQogCi1KU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSogcmV0dXJuZWRFeGNl
cHRpb24pCitKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgRXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRp
b24pCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
ZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNT
dHJpbmdUYWJsZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+dm0oKS5pc0NvbGxlY3Rv
ckJ1c3koKSk7CisgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBudWxscHRyOwogCiAgICAgQ29kZVBy
b2ZpbGluZyBwcm9maWxlKHNvdXJjZSk7CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3Jh
bSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsKICAgICBpZiAoIXBy
b2dyYW0pIHsKLSAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAgICAgICAgKnJl
dHVybmVkRXhjZXB0aW9uID0gZXhlYy0+dm0oKS5leGNlcHRpb24oKTsKLQorICAgICAgICByZXR1
cm5lZEV4Y2VwdGlvbiA9IGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCk7CiAgICAgICAgIGV4ZWMtPnZt
KCkuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQpAQCAtODMsOSArODMsNyBAQCBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKHBy
b2dyYW0sIGV4ZWMsIHRoaXNPYmopOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikKLSAgICAgICAgICAgICpyZXR1cm5lZEV4
Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotCisgICAgICAgIHJldHVybmVkRXhjZXB0aW9u
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsOCBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7
Ci0gICAgCisKK2NsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTU2Nv
cGU7CiBjbGFzcyBQYXJzZXJFcnJvcjsKQEAgLTM1LDcgKzM2LDEyIEBAIGNsYXNzIFZNOwogCiBK
U19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNrU3ludGF4KFZNJiwgY29uc3QgU291cmNlQ29kZSYs
IFBhcnNlckVycm9yJik7CiBKU19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNrU3ludGF4KEV4ZWNT
dGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKLUpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29k
ZSYsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZSgpLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAw
KTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgY29uc3Qg
U291cmNlQ29kZSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2Vw
dGlvbik7CitpbmxpbmUgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZUNvZGUsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZSgpKQorewor
ICAgIEV4Y2VwdGlvbiogdW51c2VkOworICAgIHJldHVybiBldmFsdWF0ZShleGVjLCBzb3VyY2VD
b2RlLCB0aGlzVmFsdWUsIHVudXNlZCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgJKHJldmlzaW9uIDE4NTExMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc2LDYgKzc2LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93VHlwZUVycgog
SlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93U3ludGF4RXJyb3IoRXhlY1N0YXRlKik7
CiAKIC8vIENvbnZlbmllbmNlIHdyYXBwZXJzLCB3cmFwIHJlc3VsdCBhcyBhbiBFbmNvZGVkSlNW
YWx1ZS4KK2lubGluZSB2b2lkIHRocm93Vk1FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlv
biogZXhjZXB0aW9uKSB7IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
KTsgfQogaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1FcnJvcihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgZXJyb3IpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93
RXhjZXB0aW9uKGV4ZWMsIGVycm9yKSk7IH0KIGlubGluZSBFbmNvZGVkSlNWYWx1ZSB0aHJvd1ZN
VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
VHlwZUVycm9yKGV4ZWMpKTsgfQogaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1UeXBlRXJy
b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgeyByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSkpOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
b25zdCBDbGFzc0luZm8gRXhjZXB0aW9uOjpzX2luZm8gPSB7ICJFeGNlcHRpb24iLCAmQmFzZTo6
c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEV4Y2VwdGlvbikgfTsKKworRXhjZXB0aW9u
KiBFeGNlcHRpb246OmNyZWF0ZShWTSYgdm0sIEpTVmFsdWUgdGhyb3duVmFsdWUpCit7CisgICAg
RXhjZXB0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFeGNlcHRpb24+
KHZtLmhlYXApKSBFeGNlcHRpb24odm0sIHRocm93blZhbHVlKTsKKyAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEV4Y2VwdGlvbjo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzdGF0
aWNfY2FzdDxFeGNlcHRpb24qPihjZWxsKTsKKyAgICBleGNlcHRpb24tPkV4Y2VwdGlvbjo6fkV4
Y2VwdGlvbigpOworfQorCitTdHJ1Y3R1cmUqIEV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7
CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2
b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIEV4Y2VwdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxFeGNlcHRpb24q
PihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAg
IGlmICghdGhpc09iamVjdC0+bV92YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdGhp
c09iamVjdC0+bV92YWx1ZS5nZXQoKS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3ZhbHVlKTsKK30KKworRXhjZXB0aW9uOjpFeGNl
cHRpb24oVk0mIHZtLCBKU1ZhbHVlIHRocm93blZhbHVlKQorICAgIDogQmFzZSh2bSwgdm0uZXhj
ZXB0aW9uU3RydWN0dXJlLmdldCgpKQoreworICAgIG1fdmFsdWUuc2V0KHZtLCB0aGlzLCB0aHJv
d25WYWx1ZSk7CisKKyAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKKyAgICB2bS5p
bnRlcnByZXRlci0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlKTsKKyAgICBtX3N0YWNrID0gUmVm
Q291bnRlZEFycmF5PFN0YWNrRnJhbWU+KHN0YWNrVHJhY2UpOworfQorCitFeGNlcHRpb246On5F
eGNlcHRpb24oKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRXhjZXB0aW9uX2gKKyNkZWZpbmUgRXhjZXB0aW9uX2gKKworI2luY2x1ZGUgIkludGVy
cHJldGVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKyAgICAKK2NsYXNzIEV4Y2VwdGlvbiA6IHB1YmxpYyBKU09iamVjdCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU09iamVjdCBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFn
czsKKworICAgIHN0YXRpYyBFeGNlcHRpb24qIGNyZWF0ZShWTSYsIEpTVmFsdWUgdGhyb3duVmFs
dWUpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Cisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIHN0YXRpYyBwdHJkaWZmX3QgdmFs
dWVPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGNlcHRp
b24sIG1fdmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBFeGNlcHRpb24qIGNhc3QoSlNWYWx1
ZSBleGNlcHRpb25Bc0pTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNDYXN0PEV4Y2Vw
dGlvbio+KGV4Y2VwdGlvbkFzSlNWYWx1ZS5hc0NlbGwoKSk7CisgICAgfQorCisgICAgSlNWYWx1
ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KKyAgICBjb25zdCBSZWZD
b3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIHN0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjazsg
fQorCisgICAgYm9vbCBkaWROb3RpZnlJbnNwZWN0b3JPZlRocm93KCkgY29uc3QgeyByZXR1cm4g
bV9kaWROb3RpZnlJbnNwZWN0b3JPZlRocm93OyB9CisgICAgdm9pZCBzZXREaWROb3RpZnlJbnNw
ZWN0b3JPZlRocm93KCkgeyBtX2RpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3cgPSB0cnVlOyB9CisK
KyAgICB+RXhjZXB0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgRXhjZXB0aW9uKFZNJiwgSlNWYWx1
ZSB0aHJvd25WYWx1ZSk7CisKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKKyAg
ICBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4gbV9zdGFjazsKKyAgICBib29sIG1fZGlkTm90
aWZ5SW5zcGVjdG9yT2ZUaHJvdyB7IGZhbHNlIH07CisKKyAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
eGNlcHRpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uSGVscGVycy5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1l
LmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU05v
dEFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTU5LDE3ICs2MCwxMSBA
QCBKU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwCiAgICAgcmV0dXJuIFRl
cm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKCp2bSk7CiB9CiAKLWJvb2wgaXNUZXJtaW5h
dGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTT2JqZWN0KiBvYmplY3QpCitib29sIGlzVGVybWluYXRl
ZEV4ZWN1dGlvbkV4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2VwdGlvbikKIHsKLSAgICByZXR1cm4g
b2JqZWN0LT5pbmhlcml0cyhUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmluZm8oKSk7CisgICAg
cmV0dXJuIGV4Y2VwdGlvbi0+dmFsdWUoKS5pbmhlcml0cyhUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3I6OmluZm8oKSk7CiB9CiAKLWJvb2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKFRlcm1pbmF0ZWRFeGVj
dXRpb25FcnJvcjo6aW5mbygpKTsKLX0KLQotCiBKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxv
d0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIk1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkLiIpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbkhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIHR5cGVkZWYgSlNPYmplY3QqICgqRXJyb3JGYWN0b3J5KShFeGVjU3RhdGUq
LCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CiAKIEpTT2Jq
ZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKFZNKik7Ci1ib29sIGlzVGVy
bWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU09iamVjdCopOwotSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNWYWx1ZSk7CitKU19FWFBPUlRf
UFJJVkFURSBib29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihFeGNlcHRpb24qKTsK
IEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqLCBKU1Zh
bHVlLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CiBKU19F
WFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0
ZSopOwogSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2
ICsyNCw3IEBACiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAKICNpbmNsdWRlICJFcnJvci5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC03NSw3ICs3
Niw3IEBAIEpTVmFsdWUgY2FsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAvLyBG
SVhNRTogU29tZSBjYWxsZXJzIG1heSBpbnZva2UgZ2V0KCkgd2l0aG91dCBjaGVja2luZyBmb3Ig
YW4gZXhjZXB0aW9uIGZpcnN0LgogICAgIC8vIFdlIHdvcmsgYXJvdW5kIHRoYXQgYnkgY2hlY2tp
bmcgaGVyZS4KICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBl
eGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1
ZSgpOwogCiAgICAgSlNPYmplY3QqIGdldHRlciA9IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihnZXR0
ZXJTZXR0ZXIpLT5nZXR0ZXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODUxMTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIEpTVmFsdWUgaXRlcmF0b3JTdGVwKEV4ZWNT
dGF0ZSogZXhlYywgSlMKIAogdm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBpdGVyYXRvcikKIHsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24q
IGV4Y2VwdGlvbiA9IG51bGxwdHI7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAg
ICAgICAgIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwpAQCAtOTksNyArOTksNyBAQCB2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChyZXR1cm5GdW5jdGlv
bi5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkKKyAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNyw3ICsx
MDcsNyBAQCB2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgQ2Fs
bERhdGEgcmV0dXJuRnVuY3Rpb25DYWxsRGF0YTsKICAgICBDYWxsVHlwZSByZXR1cm5GdW5jdGlv
bkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmV0dXJuRnVuY3Rpb24sIHJldHVybkZ1bmN0aW9uQ2Fs
bERhdGEpOwogICAgIGlmIChyZXR1cm5GdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkg
ewotICAgICAgICBpZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIGlmIChleGNlcHRp
b24pCiAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwpAQCAt
MTE3LDcgKzExNyw3IEBAIHZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXR1cm5GdW5jdGlvbkFyZ3VtZW50czsKICAgICBK
U1ZhbHVlIGlubmVyUmVzdWx0ID0gY2FsbChleGVjLCByZXR1cm5GdW5jdGlvbiwgcmV0dXJuRnVu
Y3Rpb25DYWxsVHlwZSwgcmV0dXJuRnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0b3IsIHJldHVybkZ1
bmN0aW9uQXJndW1lbnRzKTsKIAotICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkgeworICAg
IGlmIChleGNlcHRpb24pIHsKICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBleGNlcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVk
ZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiR2V0
dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgiCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKICNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgogI2luY2x1
ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgpAQCAt
MTM2LDcgKzEzNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMK
IAogICAgIC8vIDE0LiBJZiByZXN1bHQgaXMgYW4gYWJydXB0IGNvbXBsZXRpb24sIGNhbGwgUHJv
bWlzZVJlamVjdChwcm9taXNlLCByZXN1bHQuW1t2YWx1ZV1dKS4KICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRp
b24oKTsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKS0+dmFs
dWUoKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAgICAgICBwcm9taXNl
LT5yZWplY3Qodm0sIGV4Y2VwdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3BwCShyZXZpc2lvbiAxODUxMTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKICNp
bmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
UHJvbWlzZS5oIgpAQCAtMTUwLDcgKzE1MSw3IEBAIFRoZW5hYmxlU3RhdHVzIHVwZGF0ZURlZmVy
cmVkRnJvbVBvdGVudGkKICAgICAgICAgLy8gaS4gTGV0ICdyZWplY3RSZXN1bHQnIGJlIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kIG9mCiAgICAgICAg
IC8vICAgIGRlZmVycmVkLltbUmVqZWN0XV0gd2l0aCB1bmRlZmluZWQgYXMgdGhpc0FyZ3VtZW50
IGFuZCBhIExpc3QgY29udGFpbmluZwogICAgICAgICAvLyAgICB0aGVuLltbdmFsdWVdXSBhcyBh
cmd1bWVudHNMaXN0LgotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlv
bigpOworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1
ZSgpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgICAgIHBlcmZvcm1E
ZWZlcnJlZFJlamVjdChleGVjLCBkZWZlcnJlZCwgZXhjZXB0aW9uKTsKQEAgLTE4NSw3ICsxODYs
NyBAQCBUaGVuYWJsZVN0YXR1cyB1cGRhdGVEZWZlcnJlZEZyb21Qb3RlbnRpCiAgICAgICAgIC8v
IGkuIExldCAncmVqZWN0UmVzdWx0JyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ2Fs
bF1dIGludGVybmFsIG1ldGhvZCBvZgogICAgICAgICAvLyAgICBkZWZlcnJlZC5bW1JlamVjdF1d
IHdpdGggdW5kZWZpbmVkIGFzIHRoaXNBcmd1bWVudCBhbmQgYSBMaXN0IGNvbnRhaW5pbmcKICAg
ICAgICAgLy8gICAgdGhlbkNhbGxSZXN1bHQuW1t2YWx1ZV1dIGFzIGFyZ3VtZW50c0xpc3QuCi0g
ICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIEpT
VmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7CiAgICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgcGVyZm9ybURlZmVycmVkUmVqZWN0KGV4
ZWMsIGRlZmVycmVkLCBleGNlcHRpb24pOwpAQCAtMjI4LDcgKzIyOSw3IEBAIHZvaWQgcGVyZm9y
bURlZmVycmVkUmVqZWN0KEV4ZWNTdGF0ZSogZXgKIEpTVmFsdWUgYWJydXB0UmVqZWN0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkKQogewogICAgIEFTU0VS
VChleGVjLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgSlNWYWx1ZSBhcmd1bWVudCA9IGV4ZWMtPmV4
Y2VwdGlvbigpOworICAgIEpTVmFsdWUgYXJndW1lbnQgPSBleGVjLT5leGNlcHRpb24oKS0+dmFs
dWUoKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgLy8gaS4gTGV0ICdyZWpl
Y3RSZXN1bHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwg
bWV0aG9kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VSZWFj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9taXNlUmVhY3Rpb24uY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb21pc2VSZWFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKICNpbmNsdWRlICJFcnJvci5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCkBA
IC04OCw3ICs4OSw3IEBAIHZvaWQgRXhlY3V0ZVByb21pc2VSZWFjdGlvbk1pY3JvdGFzazo6cnUK
ICAgICAvLyAgICBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YgZGVmZXJyZWQuW1tSZWplY3Rd
XSBwYXNzaW5nIHVuZGVmaW5lZCBhcyB0aGlzQXJndW1lbnQKICAgICAvLyAgICBhbmQgYSBMaXN0
IGNvbnRhaW5pbmcgaGFuZGxlclJlc3VsdC5bW3ZhbHVlXV0gYXMgYXJndW1lbnRzTGlzdC4KICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24g
PSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5l
eGNlcHRpb24oKS0+dmFsdWUoKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAog
ICAgICAgICBwZXJmb3JtRGVmZXJyZWRSZWplY3QoZXhlYywgZGVmZXJyZWQsIGV4Y2VwdGlvbik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxODUxMTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRp
c2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkVycm9ySW5zdGFuY2UuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb24uaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCkBAIC0yMzUsNiArMjM2
LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIHdlYWtN
YXBEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgV2Vha01hcERhdGE6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFZhbHVlU3RydWN0dXJlLnNldCgqdGhp
cywgSW5mZXJyZWRWYWx1ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwog
ICAgIGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlvblJhcmVEYXRh
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgZXhjZXB0aW9uU3Ry
dWN0dXJlLnNldCgqdGhpcywgRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAjaWYgRU5BQkxFKFBST01JU0VTKQogICAgIHByb21pc2VEZWZlcnJlZFN0cnVj
dHVyZS5zZXQoKnRoaXMsIEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvbWlzZVJlYWN0aW9uU3RydWN0dXJlLnNldCgqdGhpcywg
SlNQcm9taXNlUmVhY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
QEAgLTU0NSw3ICs1NDcsNyBAQCB2b2lkIFZNOjpyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpCiAg
ICAgaGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQogCi1KU1ZhbHVlIFZNOjp0aHJvd0V4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXJyb3IpCit2b2lkIFZNOjp0aHJvd0V4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIGlmIChP
cHRpb25zOjpicmVha09uVGhyb3coKSkgewogICAgICAgICBkYXRhTG9nKCJJbiBjYWxsIGZyYW1l
ICIsIFJhd1BvaW50ZXIoZXhlYyksICIgZm9yIGNvZGUgYmxvY2sgIiwgKmV4ZWMtPmNvZGVCbG9j
aygpLCAiXG4iKTsKQEAgLTU1MywzNyArNTU1LDI0IEBAIEpTVmFsdWUgVk06OnRocm93RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXgKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGV4ZWMgPT0gdG9wQ2Fs
bEZyYW1lIHx8IGV4ZWMgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCkgfHwgZXhlYyA9PSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7
Ci0gICAgCi0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Ci0gICAgaW50ZXJwcmV0
ZXItPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7Ci0gICAgbV9leGNlcHRpb25TdGFjayA9IFJl
ZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPihzdGFja1RyYWNlKTsKLSAgICBtX2V4Y2VwdGlvbiA9
IGVycm9yOwotCi0gICAgcmV0dXJuIGVycm9yOwotfQotICAgIAotSlNPYmplY3QqIFZNOjp0aHJv
d0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBlcnJvcikKLXsKLSAgICByZXR1
cm4gYXNPYmplY3QodGhyb3dFeGNlcHRpb24oZXhlYywgSlNWYWx1ZShlcnJvcikpKTsKLX0KLXZv
aWQgVk06OmdldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJy
YXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKQotewotICAgIGV4Y2VwdGlvbiA9IG1fZXhj
ZXB0aW9uOwotICAgIGV4Y2VwdGlvblN0YWNrID0gbV9leGNlcHRpb25TdGFjazsKLX0KLXZvaWQg
Vk06OnNldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJyYXk8
U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKQotewotICAgIG1fZXhjZXB0aW9uID0gZXhjZXB0
aW9uOwotICAgIG1fZXhjZXB0aW9uU3RhY2sgPSBleGNlcHRpb25TdGFjazsKKyAgICBzZXRFeGNl
cHRpb24oZXhjZXB0aW9uKTsKIH0KIAotdm9pZCBWTTo6Y2xlYXJFeGNlcHRpb24oKQorSlNWYWx1
ZSBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRocm93blZhbHVl
KQogewotICAgIG1fZXhjZXB0aW9uID0gSlNWYWx1ZSgpOworICAgIEV4Y2VwdGlvbiogZXhjZXB0
aW9uOworICAgIGlmICh0aHJvd25WYWx1ZS5pc0NlbGwoKSAmJiB0aHJvd25WYWx1ZS5hc0NlbGwo
KS0+c3RydWN0dXJlKCkgPT0gZXhjZXB0aW9uU3RydWN0dXJlLmdldCgpKQorICAgICAgICBleGNl
cHRpb24gPSBqc0Nhc3Q8RXhjZXB0aW9uKj4odGhyb3duVmFsdWUuYXNDZWxsKCkpOworICAgIGVs
c2UKKyAgICAgICAgZXhjZXB0aW9uID0gRXhjZXB0aW9uOjpjcmVhdGUoKnRoaXMsIHRocm93blZh
bHVlKTsKKworICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgcmV0dXJu
IEpTVmFsdWUoZXhjZXB0aW9uKTsKIH0KLXZvaWQgVk06OiBjbGVhckV4Y2VwdGlvblN0YWNrKCkK
KworSlNPYmplY3QqIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBlcnJvcikKIHsKLSAgICBtX2V4Y2VwdGlvblN0YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNr
RnJhbWU+KCk7CisgICAgcmV0dXJuIGFzT2JqZWN0KHRocm93RXhjZXB0aW9uKGV4ZWMsIEpTVmFs
dWUoZXJyb3IpKSk7CiB9CiAKIHZvaWQgVk06OnNldFN0YWNrUG9pbnRlckF0Vk1FbnRyeSh2b2lk
KiBzcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsNyArNTgsNiBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KICNpbmNsdWRlIDx3
dGYvU3RhY2tCb3VuZHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4K
QEAgLTc4LDYgKzc3LDcgQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29kZUNhY2hlOwogY2xh
c3MgQ29tbW9uSWRlbnRpZmllcnM7CiBjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBFeGNlcHRpb247
CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIFR5cGVQcm9maWxlcjsKIGNsYXNzIFR5cGVQcm9m
aWxlckxvZzsKQEAgLTI3NCw2ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRW
YWx1ZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvblJhcmVEYXRhU3Ry
dWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV4Y2VwdGlvblN0cnVjdHVyZTsKICNpZiBF
TkFCTEUoUFJPTUlTRVMpCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZURlZmVycmVkU3Ry
dWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VSZWFjdGlvblN0cnVjdHVyZTsK
QEAgLTM3MiwxNCArMzczLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihWTSwgdGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwogICAgIH0KIAotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgY2xlYXJFeGNlcHRpb24oKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGNsZWFyRXhjZXB0aW9uU3RhY2soKTsKLSAgICB2b2lkIGdldEV4Y2VwdGlvbkluZm8oSlNW
YWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0
YWNrKTsKLSAgICB2b2lkIHNldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZD
b3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKTsKLSAgICBKU1ZhbHVlIGV4
Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9Ci0gICAgSlNWYWx1ZSogYWRk
cmVzc09mRXhjZXB0aW9uKCkgeyByZXR1cm4gJm1fZXhjZXB0aW9uOyB9Ci0gICAgY29uc3QgUmVm
Q291bnRlZEFycmF5PFN0YWNrRnJhbWU+JiBleGNlcHRpb25TdGFjaygpIGNvbnN0IHsgcmV0dXJu
IG1fZXhjZXB0aW9uU3RhY2s7IH0KKyAgICB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyBtX2V4Y2Vw
dGlvbiA9IG51bGxwdHI7IH0KKyAgICB2b2lkIHNldEV4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2Vw
dGlvbikgeyBtX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsgfQogCisgICAgRXhjZXB0aW9uKiBleGNl
cHRpb24oKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbjsgfQorICAgIEpTQ2VsbCoqIGFkZHJl
c3NPZkV4Y2VwdGlvbigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKio+KCZtX2V4
Y2VwdGlvbik7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhyb3dFeGNlcHRpb24o
RXhlY1N0YXRlKiwgRXhjZXB0aW9uKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0
aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU09iamVjdCogdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIApAQCAt
NTY5LDEyICs1NjksMTEgQEAgcHJpdmF0ZToKICNlbmRpZgogI2VuZGlmCiAgICAgdm9pZCogbV9s
YXN0U3RhY2tUb3A7Ci0gICAgSlNWYWx1ZSBtX2V4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIG1f
ZXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9pbkRlZmluZU93blByb3BlcnR5Owog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDb2RlQ2FjaGU+IG1fY29kZUNhY2hlOwogICAgIExlZ2FjeVBy
b2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4
ZWN1dGFibGVzPiBtX2J1aWx0aW5FeGVjdXRhYmxlczsKLSAgICBSZWZDb3VudGVkQXJyYXk8U3Rh
Y2tGcmFtZT4gbV9leGNlcHRpb25TdGFjazsKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFdh
dGNocG9pbnRTZXQ+PiBtX2ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludFNldHM7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFR5cGVQcm9maWxlcj4gbV90eXBlUHJvZmlsZXI7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFR5cGVQcm9maWxlckxvZz4gbV90eXBlUHJvZmlsZXJMb2c7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHJldmlzaW9uIDE4NTEx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDYgQEAgVk1FbnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUo
Vk0mIHZtLCBKU0dsbwogICAgICAgICAvLyBvYnNlcnZlIHRpbWUgeG9uZSBjaGFuZ2VzLgogICAg
ICAgICB2bS5yZXNldERhdGVDYWNoZSgpOwogICAgIH0KLQotICAgIC8vIENsZWFyIHRoZSBjYXB0
dXJlZCBleGNlcHRpb24gc3RhY2sgYmV0d2VlbiBlbnRyaWVzCi0gICAgdm0uY2xlYXJFeGNlcHRp
b25TdGFjaygpOwogfQogCiB2b2lkIFZNRW50cnlTY29wZTo6c2V0RW50cnlTY29wZURpZFBvcExp
c3RlbmVyKHZvaWQqIGtleSwgRW50cnlTY29wZURpZFBvcExpc3RlbmVyIGxpc3RlbmVyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9FeGNlcHRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0V4
Y2VwdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9FeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNp
Zm5kZWYgV2ViQ29yZV9GV0RfRXhjZXB0aW9uX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfRXhjZXB0
aW9uX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9FeGNlcHRpb24uaD4KKyNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0Rh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMCArNzMsMTAgQEAgSlNWYWx1ZSBKU0NhbGxi
YWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSgogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9u
Q2FsbChjb250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRp
b247CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjb250
ZXh0LT5pc0RvY3VtZW50KCkKLSAgICAgICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwo
ZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCAmZXhj
ZXB0aW9uKQotICAgICAgICA6IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsICZleGNlcHRpb24pOworICAgICAgICA/IEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0
aGlzVmFsdWUsIGFyZ3MsIGV4Y2VwdGlvbikKKyAgICAgICAgOiBKU0M6OmNhbGwoZXhlYywgZnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pOwog
CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCBj
b250ZXh0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0
aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Myw4ICs5Myw4IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6
bG9va3VwTmEKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5k
KGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHByZWZpeCkpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRp
b247Ci0gICAgSlNWYWx1ZSByZXR2YWwgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhl
YywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV9jdXN0b21SZXNvbHZlci5nZXQoKSwg
YXJncywgJmV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CisgICAgSlNWYWx1
ZSByZXR2YWwgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwgbV9jdXN0b21SZXNvbHZlci5nZXQoKSwgYXJncywgZXhjZXB0aW9u
KTsKIAogICAgIFN0cmluZyByZXN1bHQ7CiAgICAgaWYgKGV4Y2VwdGlvbikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNl
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JI
YW5kbGluZ1Njb3BlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KICNpbmNsdWRl
IDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rp
b24uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTEzOCw3ICsxMzksNyBAQCBKU0M6OkpTVmFs
dWUganNBcnJheShKU0M6OkV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0
QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0LCBsaXN0KTsKIH0KIAotdm9pZCByZXBvcnRFeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBj
YWNoZWRTY3JpcHQpCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2Vw
dGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChleGVjLT52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwog
ICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSkKQEAgLTE0
OCw3ICsxNDksNiBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAK
ICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0
YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4Q2Fs
bFN0YWNrU2l6ZVRvQ2FwdHVyZSkpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAg
ZXhlYy0+Y2xlYXJTdXBwbGVtZW50YXJ5RXhjZXB0aW9uSW5mbygpOwogCiAgICAgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSBq
c0R5bmFtaWNDYXN0PEpTRE9NV2luZG93Kj4oZ2xvYmFsT2JqZWN0KSkgewpAQCAtMTY2LDE0ICsx
NjYsMTMgQEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIH0K
IAogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKEV4Y2VwdGlvbkJhc2UqIGV4Y2Vw
dGlvbkJhc2UgPSB0b0V4Y2VwdGlvbkJhc2UoZXhjZXB0aW9uKSkKKyAgICBpZiAoRXhjZXB0aW9u
QmFzZSogZXhjZXB0aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFzZShleGNlcHRpb24tPnZhbHVlKCkp
KQogICAgICAgICBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb25CYXNlLT5tZXNzYWdlKCkgKyAiOiAi
ICArIGV4Y2VwdGlvbkJhc2UtPmRlc2NyaXB0aW9uKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8v
IEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNwZWN0b3I6IFdlYkNv
cmU6OnJlcG9ydEV4Y2VwdGlvbiBzaG91bGQgbm90IGV2YWx1YXRlIEphdmFTY3JpcHQgaGFuZGxp
bmcgZXhjZXB0aW9ucwogICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY3VzdG9uIGV4Y2VwdGlvbiBv
YmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5IGFuZCBnZXQgYSBuaWNlIHN0cmluZyBy
ZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4KLSAgICAgICAgZXJyb3JNZXNzYWdlID0g
ZXhjZXB0aW9uLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgZXJyb3JNZXNz
YWdlID0gZXhjZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJTdXBwbGVt
ZW50YXJ5RXhjZXB0aW9uSW5mbygpOwogICAgIH0KIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKQEAgLTE4Miw3ICsxODEsNyBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTCiAKIHZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAg
ICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNp
b24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0Nyw3ICsyNDcsNyBAQCB2b2lkIGFkZEltcHVyZVByb3BlcnR5
KGNvbnN0IEF0b21pY1N0cmluCiAKIGNvbnN0IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVG
b3JHbG9iYWxEYXRhKEpTQzo6Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUp
OwogCi1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogPSBudWxscHRyKTsKK1dFQkNP
UkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNl
cHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7CiB2b2lkIHJlcG9ydEN1cnJlbnRFeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKIAogSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OCwxMCArOTgsMTAgQEAgdm9pZCBKU0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQo
U2NyaXB0RQogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIFZN
RW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCB2bS5lbnRyeVNjb3BlID8gdm0uZW50cnlTY29wZS0+
Z2xvYmFsT2JqZWN0KCkgOiBnbG9iYWxPYmplY3QpOwogCi0gICAgICAgIEpTVmFsdWUgZXhjZXB0
aW9uOworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICAgICAgSlNWYWx1ZSByZXR1
cm5WYWx1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKQotICAgICAgICAg
ICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywganNGdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ3MsICZleGNlcHRpb24pCi0gICAgICAgICAg
ICA6IEpTQzo6Y2FsbChleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2Jh
bE9iamVjdCwgYXJncywgJmV4Y2VwdGlvbik7CisgICAgICAgICAgICA/IEpTTWFpblRocmVhZEV4
ZWNTdGF0ZTo6Y2FsbChleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2Jh
bE9iamVjdCwgYXJncywgZXhjZXB0aW9uKQorICAgICAgICAgICAgOiBKU0M6OmNhbGwoZXhlYywg
anNGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ3MsIGV4Y2Vw
dGlvbik7CiAKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRDdXJyZW50RXZlbnQoc2F2ZWRFdmVu
dCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDEwICsxMjQsMTAgQEAg
dm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpp
bnN0cnVtZW50RnVuY3Rpb25DYWxsKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNhbGxUeXBlLCBj
YWxsRGF0YSk7CiAKICAgICAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBoYW5kbGVFdmVudEZ1bmN0
aW9uID09IGpzRnVuY3Rpb24gPyB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgZXZlbnQtPmN1cnJl
bnRUYXJnZXQoKSkgOiBqc0Z1bmN0aW9uOwotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAg
ICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgICAgIEpTVmFsdWUgcmV0dmFsID0gc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpCi0gICAgICAgICAgICA/IEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgJmV4Y2VwdGlvbikKLSAgICAgICAgICAgIDogSlND
OjpjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhp
c1ZhbHVlLCBhcmdzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgICAgID8gSlNNYWluVGhyZWFkRXhl
Y1N0YXRlOjpjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pCisgICAgICAgICAgICA6IEpTQzo6Y2FsbChl
eGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwg
YXJncywgZXhjZXB0aW9uKTsKIAogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZENhbGxGdW5jdGlvbihjb29raWUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0
ZS5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE4ICs0NiwxOCBA
QCB2b2lkIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZGlkTGVhdmVTY3JpCiAgICAgTXV0YXRpb25P
YnNlcnZlcjo6ZGVsaXZlckFsbE11dGF0aW9ucygpOwogfQogCi1KU0M6OkpTVmFsdWUgZnVuY3Rp
b25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpD
YWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJn
TGlzdCYgYXJncywgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCitKU0M6OkpTVmFsdWUgZnVuY3Rp
b25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpD
YWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJn
TGlzdCYgYXJncywgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBp
ZiAoaXNNYWluVGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBKU01haW5UaHJlYWRFeGVjU3RhdGU6
OmNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVl
LCBhcmdzLCBleGNlcHRpb24pOwotICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb25P
YmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pOwor
ICAgICAgICByZXR1cm4gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9u
T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgcmV0dXJuZWRFeGNl
cHRpb24pOworICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGNhbGxU
eXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCByZXR1cm5lZEV4Y2VwdGlvbik7CiB9CiAK
LUpTQzo6SlNWYWx1ZSBldmFsdWF0ZUhhbmRsZXJGcm9tQW55VGhyZWFkKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCitKU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5k
bGVyRnJvbUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VD
b2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0
dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgaWYgKGlzTWFpblRocmVhZCgpKQotICAgICAgICByZXR1
cm4gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1
ZSwgZXhjZXB0aW9uKTsKLSAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRo
aXNWYWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTTWFpblRocmVhZEV4ZWNTdGF0
ZTo6ZXZhbHVhdGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIHJldHVybmVkRXhjZXB0aW9uKTsK
KyAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1ZSwgcmV0dXJu
ZWRFeGNlcHRpb24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE2ICs1MCwyMiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBzX21haW5UaHJlYWRTdGF0ZTsKICAgICB9OwogICAgIAotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY2FsbChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1
bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRh
JiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBh
cmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbikKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNh
bGwoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlND
OjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpFeGNlcHRp
b24qJiByZXR1cm5lZEV4Y2VwdGlvbikKICAgICB7CiAgICAgICAgIEpTTWFpblRocmVhZEV4ZWNT
dGF0ZSBjdXJyZW50U3RhdGUoZXhlYyk7Ci0gICAgICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywg
ZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNl
cHRpb24pOworICAgICAgICByZXR1cm4gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBj
YWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgcmV0dXJuZWRFeGNlcHRpb24pOwog
ICAgIH07CiAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBl
dmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3Vy
Y2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNl
cHRpb24pCiAgICAgewogICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGUgY3VycmVudFN0YXRl
KGV4ZWMpOwotICAgICAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNW
YWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6ZXZhbHVhdGUoZXhlYywgc291
cmNlLCB0aGlzVmFsdWUsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICB9OworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpT
b3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUgPSBKU0M6OkpTVmFsdWUo
KSkKKyAgICB7CisgICAgICAgIEpTQzo6RXhjZXB0aW9uKiB1bnVzZWQ7CisgICAgICAgIHJldHVy
biBldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1ZSwgdW51c2VkKTsKICAgICB9OwogCiAg
ICAgc3RhdGljIHZvaWQgcnVuVGFzayhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpNaWNyb3Rh
c2smIHRhc2spCkBAIC0xMjEsOCArMTI3LDggQEAgcHJpdmF0ZToKICAgICBKU0M6OkV4ZWNTdGF0
ZSogbV9wcmV2aW91c1N0YXRlOwogfTsKIAotSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uQ2FsbEhhbmRs
ZXJGcm9tQW55VGhyZWFkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2Jq
ZWN0LCBKU0M6OkNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiwgSlNDOjpKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlv
bik7Ci1KU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5kbGVyRnJvbUFueVRocmVhZChKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpT
Qzo6SlNWYWx1ZSogZXhjZXB0aW9uKTsKK0pTQzo6SlNWYWx1ZSBmdW5jdGlvbkNhbGxIYW5kbGVy
RnJvbUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgSlNDOjpDYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYsIEpTQzo6SlNWYWx1ZSB0aGlz
VmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5l
ZEV4Y2VwdGlvbik7CitKU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5kbGVyRnJvbUFueVRocmVhZChK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIEpTQzo6SlNWYWx1ZSB0aGlz
VmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pOwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRp
b25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNdXRhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODcsOCArODcsOCBAQCB2b2lkIEpTTXV0YXRpb25DYWxsYmFjazo6Y2FsbChjb25zdCBWZWN0CiAK
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSlNNYWluVGhyZWFk
RXhlY1N0YXRlOjppbnN0cnVtZW50RnVuY3Rpb25DYWxsKGNvbnRleHQsIGNhbGxUeXBlLCBjYWxs
RGF0YSk7CiAKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICBKU01haW5UaHJlYWRFeGVjU3Rh
dGU6OmNhbGwoZXhlYywgY2FsbGJhY2ssIGNhbGxUeXBlLCBjYWxsRGF0YSwganNPYnNlcnZlciwg
YXJncywgJmV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CisgICAgSlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGNhbGxiYWNrLCBjYWxsVHlwZSwgY2FsbERhdGEs
IGpzT2JzZXJ2ZXIsIGFyZ3MsIGV4Y2VwdGlvbik7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZENhbGxGdW5jdGlvbihjb29raWUsIGNvbnRleHQpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZUpTU3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZUpTU3RyZWFtLmNwcAkocmV2aXNpb24g
MTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVKU1N0cmVhbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGdldFByb3BlcnR5RnJvbU9iagogICAgIHJldHVybiBvYmplY3QtPmdldChleGVjLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGlkZW50aWZpZXIpKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGNhbGxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUganNGdW5jdGlvbiwg
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cywgSlNWYWx1ZSogZXhj
ZXB0aW9uKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGNhbGxGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUganNGdW5jdGlvbiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3VtZW50cywgRXhjZXB0aW9uKiYgZXhjZXB0aW9uKQogewogICAgIENhbGxEYXRhIGNhbGxE
YXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoanNGdW5jdGlvbiwgY2Fs
bERhdGEpOwpAQCAtMTAwLDggKzEwMCw4IEBAIHZvaWQgUmVhZGFibGVKU1N0cmVhbTo6U291cmNl
OjpzdGFydChFeGUKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJn
dW1lbnRzLmFwcGVuZChyZWFkYWJsZVN0cmVhbS5qc0NvbnRyb2xsZXIoZXhlYywgZ2xvYmFsT2Jq
ZWN0KCkpKTsKIAotICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgIGNhbGxGdW5jdGlvbigmZXhl
Yywgc3RhcnRGdW5jdGlvbiwgbV9zb3VyY2UuZ2V0KCksIGFyZ3VtZW50cywgJmV4Y2VwdGlvbik7
CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CisgICAgY2FsbEZ1bmN0aW9uKCZleGVjLCBzdGFy
dEZ1bmN0aW9uLCBtX3NvdXJjZS5nZXQoKSwgYXJndW1lbnRzLCBleGNlcHRpb24pOwogCiAgICAg
aWYgKGV4Y2VwdGlvbikgewogICAgICAgICB0aHJvd1ZNRXJyb3IoJmV4ZWMsIGV4Y2VwdGlvbik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5j
cHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVk
dWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDExICs5OSwxMSBAQCB2b2lkIFNj
aGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZUZ1bmN0aW9uSW5DCiAKICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUgY29va2llID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjppbnN0cnVtZW50
RnVuY3Rpb25DYWxsKCZjb250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwogCi0gICAgSlNWYWx1
ZSBleGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgaWYgKGlzPERvY3Vt
ZW50Pihjb250ZXh0KSkKLSAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMs
IG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCAm
ZXhjZXB0aW9uKTsKKyAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIG1f
ZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNl
cHRpb24pOwogICAgIGVsc2UKLSAgICAgICAgSlNDOjpjYWxsKGV4ZWMsIG1fZnVuY3Rpb24uZ2V0
KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCAmZXhjZXB0aW9uKTsKKyAg
ICAgICAgSlNDOjpjYWxsKGV4ZWMsIG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0
YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pOwogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCAmY29udGV4dCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDkgKzE2MCw4IEBAIERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlIFNjcmlwdENvbnRyb2xsZXIKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVNjcmlw
dChtX2ZyYW1lLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuc3RhcnRMaW5lKCkpOwogCi0gICAgSlNW
YWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotCi0gICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpT
TWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywganNTb3VyY2VDb2RlLCBzaGVsbCwg
JmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEV4Y2VwdGlvbiogZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKKyAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFs
dWF0ZShleGVjLCBqc1NvdXJjZUNvZGUsIHNoZWxsLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKIAog
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRXZhbHVhdGVTY3JpcHQoY29va2llLCBt
X2ZyYW1lKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSA8cnVudGltZS9Cb29sZWFuT2JqZWN0Lmg+CiAj
aW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KICNpbmNsdWRlIDxydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KICNp
bmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRl
IDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KICNpbmNsdWRlIDxpbnRlcnByZXRlci9JbnRlcnByZXRl
ci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
RXhjZXB0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+CiAjaW5j
bHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CkBAIC05
OCwxNSArOTksMTUgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjbwog
ICAgIGlmIChpc0V4ZWN1dGlvbkZvcmJpZGRlbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBleGNlcHRpb247Ci0gICAgZXZhbHVhdGUoc291cmNlQ29k
ZSwgJmV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbi5qc1ZhbHVlKCkpIHsKKyAgICBFeGNl
cHRpb24qIGV4Y2VwdGlvbjsKKyAgICBldmFsdWF0ZShzb3VyY2VDb2RlLCBleGNlcHRpb24pOwor
ICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0oKSk7Ci0g
ICAgICAgIHJlcG9ydEV4Y2VwdGlvbihtX3dvcmtlckdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFs
RXhlYygpLCBleGNlcHRpb24uanNWYWx1ZSgpKTsKKyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1f
d29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCksIGV4Y2VwdGlvbik7CiAgICAg
fQogfQogCi12b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlw
dFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKiBleGNlcHRp
b24pCit2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNv
dXJjZUNvZGUmIHNvdXJjZUNvZGUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24p
CiB7CiAgICAgaWYgKGlzRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTExNiw4ICsxMTcsOCBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNv
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2Jh
bEV4ZWMoKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAotICAgIEpTVmFsdWUgZXZh
bHVhdGlvbkV4Y2VwdGlvbjsKLSAgICBKU0M6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZUNvZGUuanNT
b3VyY2VDb2RlKCksIG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxUaGlzKCksICZl
dmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBKU0M6OkV4Y2VwdGlvbiogZXZhbHVhdGlvbkV4Y2Vw
dGlvbjsKKyAgICBKU0M6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZUNvZGUuanNTb3VyY2VDb2RlKCks
IG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxUaGlzKCksIGV2YWx1YXRpb25FeGNl
cHRpb24pOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBpZiAoKGV2YWx1YXRpb25F
eGNlcHRpb24gJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV2YWx1YXRpb25FeGNl
cHRpb24pKSAKQEAgLTEzMSwxNiArMTMyLDE5IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6ZXZhbHVhdGUoY28KICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwogICAgICAgICBpbnQg
Y29sdW1uTnVtYmVyID0gMDsKICAgICAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IHNvdXJjZUNvZGUu
dXJsKCkuc3RyaW5nKCk7Ci0gICAgICAgIGlmIChtX3dvcmtlckdsb2JhbFNjb3BlLT5zYW5pdGl6
ZVNjcmlwdEVycm9yKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3Vy
Y2VVUkwsIHNvdXJjZUNvZGUuY2FjaGVkU2NyaXB0KCkpKQotICAgICAgICAgICAgKmV4Y2VwdGlv
biA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCptX3ZtLCBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZS5pbXBsKCkpKSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSgqbV92bSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgICAgIGlmIChtX3dvcmtlckdsb2Jh
bFNjb3BlLT5zYW5pdGl6ZVNjcmlwdEVycm9yKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29s
dW1uTnVtYmVyLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuY2FjaGVkU2NyaXB0KCkpKSB7CisgICAg
ICAgICAgICB2bS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBlcnJvck1l
c3NhZ2UuaW1wbCgpKSk7CisgICAgICAgICAgICBldmFsdWF0aW9uRXhjZXB0aW9uID0gdm0uZXhj
ZXB0aW9uKCk7CisgICAgICAgICAgICB2bS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICB9CiAg
ICAgfQorICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKIH0KIAot
dm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzZXRFeGNlcHRpb24oY29uc3QgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUmIGV4Y2VwdGlvbikKK3ZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
c2V0RXhjZXB0aW9uKEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24pCiB7Ci0gICAgbV93b3JrZXJH
bG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbEV4ZWMoKS0+dm0oKS50aHJvd0V4Y2VwdGlvbihtX3dv
cmtlckdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsRXhlYygpLCBleGNlcHRpb24uanNWYWx1ZSgp
KTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVy
LT5nbG9iYWxFeGVjKCk7CisgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNl
cHRpb24pOwogfQogCiB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNjaGVkdWxlRXhlY3V0
aW9uVGVybWluYXRpb24oKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2Vy
U2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MCw5ICs2MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogCiAg
ICAgICAgIHZvaWQgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwotICAgICAgICB2
b2lkIGV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmLCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSogZXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBldmFsdWF0ZShjb25zdCBTY3JpcHRTb3Vy
Y2VDb2RlJiwgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKLSAgICAgICAg
dm9pZCBzZXRFeGNlcHRpb24oY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmKTsKKyAgICAg
ICAgdm9pZCBzZXRFeGNlcHRpb24oSlNDOjpFeGNlcHRpb24qKTsKIAogICAgICAgICAvLyBBc3lu
YyByZXF1ZXN0IHRvIHRlcm1pbmF0ZSBhIEpTIHJ1biBleGVjdXRpb24uIEV2ZW50dWFsbHkgY2F1
c2VzIHRlcm1pbmF0aW9uCiAgICAgICAgIC8vIGV4Y2VwdGlvbiByYWlzZWQgZHVyaW5nIEpTIGV4
ZWN1dGlvbiwgaWYgdGhlIHdvcmtlciB0aHJlYWQgaGFwcGVucyB0byBydW4gSlMuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5
LDcgQEAgdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cnVuRXZlbnRMbwogICAgIH0gd2hp
bGUgKHJlc3VsdCAhPSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkICYmICFtX2RvbmVQcm9jZXNzaW5n
RGVidWdnZXJFdmVudHMpOwogfQogCi12b2lkIFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjpyZXBv
cnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24p
IGNvbnN0Cit2b2lkIFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjpyZXBvcnRFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24pIGNvbnN0CiB7CiAg
ICAgV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2Vy
dmVyLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dv
cmtlclNjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoSlNDOjpKU0dsb2JhbE9iamVj
dCopIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBydW5FdmVudExvb3BXaGlsZVBhdXNl
ZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRTY3JpcHQoSlNDOjpFeGVj
U3RhdGUqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9p
ZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkV4Y2VwdGlvbiopIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgV29ya2VyR2xvYmFsU2Nv
cGUqIG1fd29ya2VyR2xvYmFsU2NvcGU7CiAgICAgTGlzdGVuZXJTZXQgbV9saXN0ZW5lcnM7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5t
bQkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJT
Y3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNyBAQCBpZCBjcmVh
dGVKU1dyYXBwZXIoSlNDOjpKU09iamVjdCogb2JqZWN0CiAgICAgcmV0dXJuIFtbW1dlYlNjcmlw
dE9iamVjdCBhbGxvY10gX2luaXRXaXRoSlNPYmplY3Q6b2JqZWN0IG9yaWdpblJvb3RPYmplY3Q6
b3JpZ2luIHJvb3RPYmplY3Q6cm9vdF0gYXV0b3JlbGVhc2VdOwogfQogCi1zdGF0aWMgdm9pZCBh
ZGRFeGNlcHRpb25Ub0NvbnNvbGUoRXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUmIGV4Y2Vw
dGlvbikKK3N0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9
IGFzSlNET01XaW5kb3coZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpKTsKICAgICBpZiAoIXdp
bmRvdyB8fCAhZXhjZXB0aW9uKQpAQCAtMTMxLDcgKzEzMSw3IEBAIHN0YXRpYyB2b2lkIGFkZEV4
Y2VwdGlvblRvQ29uc29sZShFeGVjU3QKIAogc3RhdGljIHZvaWQgYWRkRXhjZXB0aW9uVG9Db25z
b2xlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uID0gZXhl
Yy0+ZXhjZXB0aW9uKCk7CisgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4
Y2VwdGlvbigpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgYWRkRXhjZXB0aW9u
VG9Db25zb2xlKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CkBAIC0zNDIsOCArMzQyLDggQEAgLSAoaWQp
Y2FsbFdlYlNjcmlwdE1ldGhvZDooTlNTdHJpbmcgKiluYQogICAgIGlmICghW3NlbGYgX2lzU2Fm
ZVNjcmlwdF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBKU0M6OkpTVmFsdWUgZXhjZXB0
aW9uOwotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNh
bGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgW3NlbGYgX2ltcF0sIGFyZ0xp
c3QsICZleGNlcHRpb24pOworICAgIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb247CisgICAgSlND
OjpKU1ZhbHVlIHJlc3VsdCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBmdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBbc2VsZiBfaW1wXSwgYXJnTGlzdCwgZXhjZXB0aW9u
KTsKIAogICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xl
KGV4ZWMsIGV4Y2VwdGlvbik7CkBAIC0zNjYsNyArMzY2LDcgQEAgLSAoaWQpZXZhbHVhdGVXZWJT
Y3JpcHQ6KE5TU3RyaW5nICopc2NyaQogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAg
ICAgCi0gICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRl
OjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQpKSwgSlNDOjpKU1ZhbHVl
KCksIDApOworICAgIEpTQzo6SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFpblRocmVhZEV4ZWNT
dGF0ZTo6ZXZhbHVhdGUoZXhlYywgbWFrZVNvdXJjZShTdHJpbmcoc2NyaXB0KSksIEpTQzo6SlNW
YWx1ZSgpKTsKIAogICAgIGlkIHJlc3VsdE9iaiA9IFtXZWJTY3JpcHRPYmplY3QgX2NvbnZlcnRW
YWx1ZVRvT2JqY1ZhbHVlOnJldHVyblZhbHVlIG9yaWdpblJvb3RPYmplY3Q6W3NlbGYgX29yaWdp
blJvb3RPYmplY3RdIHJvb3RPYmplY3Q6W3NlbGYgX3Jvb3RPYmplY3RdXTsKICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNj
cmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIGJv
b2wgUGFnZVNjcmlwdERlYnVnU2VydmVyOjppc0NvbnRlbnRTY3IKICAgICByZXR1cm4gJmN1cnJl
bnRXb3JsZChleGVjKSAhPSAmbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7CiB9CiAKLXZvaWQgUGFn
ZVNjcmlwdERlYnVnU2VydmVyOjpyZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGV4Y2VwdGlvbikgY29uc3QKK3ZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZXBvcnRF
eGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikgY29uc3QKIHsK
ICAgICBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmgJ
KHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0
RGVidWdTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHJ1bkV2ZW50TG9vcFdoaWxlUGF1c2VkKCkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudFNjcmlwdChKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXBv
cnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiopIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgdm9pZCBydW5FdmVudExvb3BXaGlsZVBhdXNlZEludGVybmFsKCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCShyZXZp
c2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3Bl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDkgKzE5Nyw5IEBAIHZvaWQgV29ya2VyR2xvYmFs
U2NvcGU6OmltcG9ydFNjcmlwdHMoY28KIAogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OnNjcmlwdEltcG9ydGVkKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc2NyaXB0TG9hZGVy
LT5pZGVudGlmaWVyKCksIHNjcmlwdExvYWRlci0+c2NyaXB0KCkpOwogCi0gICAgICAgIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlIGV4Y2VwdGlvbjsKLSAgICAgICAgbV9zY3JpcHQtPmV2YWx1YXRl
KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSwgc2NyaXB0TG9hZGVyLT5y
ZXNwb25zZVVSTCgpKSwgJmV4Y2VwdGlvbik7Ci0gICAgICAgIGlmICghZXhjZXB0aW9uLmhhc05v
VmFsdWUoKSkgeworICAgICAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uOworICAgICAgICBt
X3NjcmlwdC0+ZXZhbHVhdGUoU2NyaXB0U291cmNlQ29kZShzY3JpcHRMb2FkZXItPnNjcmlwdCgp
LCBzY3JpcHRMb2FkZXItPnJlc3BvbnNlVVJMKCkpLCBleGNlcHRpb24pOworICAgICAgICBpZiAo
ZXhjZXB0aW9uKSB7CiAgICAgICAgICAgICBtX3NjcmlwdC0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlv
bik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiAr
NTAsNyBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
QVBJQ2FzdC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0V4Y2VwdGlvbi5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRp
b25DYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4K
QEAgLTUyMiw3ICs1MjMsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXBvcnRFeGNlcHRpb24o
SlNDCiAgICAgaWYgKCF0b0pTRE9NV2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKGV4
ZWNTdGF0ZSwgdG9KUyhleGVjU3RhdGUsIGV4Y2VwdGlvbikpOworICAgIFdlYkNvcmU6OnJlcG9y
dEV4Y2VwdGlvbihleGVjU3RhdGUsIEV4Y2VwdGlvbjo6Y2FzdCh0b0pTKGV4ZWNTdGF0ZSwgZXhj
ZXB0aW9uKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRDcmVhdGVQYWdlKFdlYlBh
Z2UqIHBhZ2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lv
biAxODUxMTApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTExNCw2ICsxMTQsNyBAQAogI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ0ZT
ZXQuaD4KICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxDb25uZWN0aW9uLmg+CiAjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9FeGNlcHRp
b24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KICNpbXBvcnQgPFdl
YkNvcmUvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Fu
aW1hdGlvbkNvbnRyb2xsZXIuaD4KQEAgLTcyNCw3ICs3MjUsOCBAQCArICh2b2lkKV9yZXBvcnRF
eGNlcHRpb246KEpTVmFsdWVSZWYpZXhjCiAgICAgaWYgKCF0b0pTRE9NV2luZG93KGV4ZWNTdGF0
ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVwb3J0
RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgdG9KUyhleGVjU3RhdGUsIGV4Y2VwdGlvbikpOworICAgIEV4
Y2VwdGlvbiogdm1FeGNlcHRpb24gPSBFeGNlcHRpb246OmNhc3QodG9KUyhleGVjU3RhdGUsIGV4
Y2VwdGlvbikpOworICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjU3RhdGUsIHZtRXhjZXB0aW9uKTsK
IH0KIAogc3RhdGljIHZvaWQgV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQ2FjaGVQYXRoSWZO
ZWNlc3NhcnkoKQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVncmVzcy0xMzE1MzAtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3JlZ3Jlc3MtMTMx
NTMwLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTg1MTEwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9k
b20vcmVncmVzcy0xMzE1MzAtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogQ09OU09MRSBNRVNTQUdFOiBsaW5lIDU6IEV4Y2VwdGlvbiB0byB0cmlnZ2VyIHVud2lu
ZGluZyBpbiBNdXRhdGlvbk9ic2VydmVyCi1DT05TT0xFIE1FU1NBR0U6IFBlbmRpbmcgZXhjZXB0
aW9uIGJlZm9yZSBNdXRhdGlvbk9ic2VydmVycyBhcmUgY2FsbGVkLgorQ09OU09MRSBNRVNTQUdF
OiBsaW5lIDIyOiBQZW5kaW5nIGV4Y2VwdGlvbiBiZWZvcmUgTXV0YXRpb25PYnNlcnZlcnMgYXJl
IGNhbGxlZC4KIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTMxNTMw
LiBUaGlzIHRlc3Qgc2hvdWxkIG5vdCBjcmFzaC4KIAogTXV0YXRlIHRoYXQgbm9kZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254163</attachid>
            <date>2015-06-03 02:55:30 -0700</date>
            <delta_ts>2015-06-03 12:21:04 -0700</delta_ts>
            <desc>patch 4: another try to fix those gtk, efl build failures.</desc>
            <filename>wip-exception5.patch</filename>
            <type>text/plain</type>
            <size>138290</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4NTExMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDU0LDYgKzQ1NCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAg
ICBydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5jcHAKICAgICBydW50aW1lL0Vycm9ySW5zdGFu
Y2UuY3BwCiAgICAgcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKKyAgICBydW50aW1lL0V4Y2Vw
dGlvbi5jcHAKICAgICBydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCiAgICAgcnVudGltZS9FeGNl
cHRpb25IZWxwZXJzLmNwcAogICAgIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNvbXBs
ZXRpb24uaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJEaXNh
c3NlbWJsZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFeGNlcHRpb25I
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJJbml0aWFs
aXplVGhyZWFkaW5nLmgiCkBAIC04OTksMTMgKzkwMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoCiAgICAg
ICAgIGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksICJhcmd1bWVudHMiKSwgYXJyYXkpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRpb247
CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKICAg
ICBzdG9wV2F0Y2guc3RhcnQoKTsKLSAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSwganNjU291cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXhj
ZXB0aW9uKTsKKyAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291
cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCBleGNlcHRpb24pOwogICAg
IHN0b3BXYXRjaC5zdG9wKCk7CiAKLSAgICBpZiAoISFleGNlcHRpb24pIHsKKyAgICBpZiAoZXhj
ZXB0aW9uKSB7CiAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpAQCAtOTIyLDggKzkyMyw4IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2EKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgCi0gICAgSlNWYWx1
ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFt
ZSksIEpTVmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEV4Y2VwdGlvbiogZXZh
bHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBK
U1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIGlmIChldmFsdWF0aW9uRXhjZXB0
aW9uKQogICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV2YWx1YXRpb25F
eGNlcHRpb24pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTEyODUs
MTUgKzEyODYsMTUgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0Kgog
CiAgICAgICAgIHZtLnN0YXJ0U2FtcGxpbmcoKTsKIAotICAgICAgICBKU1ZhbHVlIGV2YWx1YXRp
b25FeGNlcHRpb247Ci0gICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdCwgZmlsZU5hbWUpLCBKU1Zh
bHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgRXhjZXB0aW9uKiBldmFsdWF0
aW9uRXhjZXB0aW9uOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZpbGVOYW1lKSwgSlNW
YWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3Mg
JiYgIWV2YWx1YXRpb25FeGNlcHRpb247CiAgICAgICAgIGlmIChkdW1wICYmICFldmFsdWF0aW9u
RXhjZXB0aW9uKQogICAgICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50
b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNl
cHRpb24pIHsKLSAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlv
bkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHBy
aW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0
cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIElkZW50aWZpZXIgc3RhY2tJ
RCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksICJz
dGFjayIpOwotICAgICAgICAgICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXZhbHVhdGlvbkV4Y2Vw
dGlvbi5nZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOworICAgICAgICAg
ICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS5nZXQo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOwogICAgICAgICAgICAgaWYgKCFz
dGFja1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIl
c1xuIiwgc3RhY2tWYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZh
bHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
fQpAQCAtMTM0OSw4ICsxMzUwLDggQEAgc3RhdGljIHZvaWQgcnVuSW50ZXJhY3RpdmUoR2xvYmFs
T2JqZWN0KgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBl
dmFsdWF0aW9uRXhjZXB0aW9uOwotICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVh
dGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc291cmNlLCBpbnRlcnBy
ZXRlck5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgRXhj
ZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVl
ID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc291cmNl
LCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogI2Vs
c2UKICAgICAgICAgcHJpbnRmKCIlcyIsIGludGVyYWN0aXZlUHJvbXB0KTsKICAgICAgICAgVmVj
dG9yPGNoYXIsIDI1Nj4gbGluZTsKQEAgLTEzNjUsMTEgKzEzNjYsMTEgQEAgc3RhdGljIHZvaWQg
cnVuSW50ZXJhY3RpdmUoR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGxpbmUuYXBwZW5kKCdcMCcpOwogCi0gICAgICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKLSAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2UobGluZS5kYXRhKCksIGludGVycHJldGVyTmFtZSksIEpT
VmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgICAgICBFeGNlcHRpb24qIGV2YWx1
YXRpb25FeGNlcHRpb247CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKGxpbmUuZGF0YSgpLCBpbnRlcnBy
ZXRlck5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogI2VuZGlmCiAgICAg
ICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQotICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRp
b246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhj
ZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFs
dWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
KS51dGY4KCkuZGF0YSgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNw
cAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQVBJQ2FzdC5o
IgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNs
dWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNs
dWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIK
QEAgLTYzLDEyICs2NCwxMiBAQCBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0
UmVmCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKTsKICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT5z
dHJpbmcoKSwgc291cmNlVVJMID8gc291cmNlVVJMLT5zdHJpbmcoKSA6IFN0cmluZygpLCBUZXh0
UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHN0YXJ0aW5nTGluZU51bWJl
ciksIE9yZGluYWxOdW1iZXI6OmZpcnN0KCkpKTsKIAotICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4
Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIHNvdXJjZSwganNUaGlzT2JqZWN0LCAmZXZhbHVhdGlvbkV4Y2VwdGlv
bik7CisgICAgRXhjZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmV0
dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc291cmNlLCBq
c1RoaXNPYmplY3QsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogCiAgICAgaWYgKGV2YWx1YXRpb25F
eGNlcHRpb24pIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRp
b24gPSB0b1JlZihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgICAgICpleGNl
cHRpb24gPSB0b1JlZihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1ZSgpKTsKICNpZiBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKICAgICAgICAgLy8gRklYTUU6IElmIHdlIGhhdmUgYSBk
ZWJ1Z2dlciBhdHRhY2hlZCB3ZSBjb3VsZCBsZWFybiBhYm91dCBQYXJzZUVycm9yIGV4Y2VwdGlv
bnMgdGhyb3VnaAogICAgICAgICAvLyBTY3JpcHREZWJ1Z1NlcnZlcjo6c291cmNlUGFyc2VkIGFu
ZCB0aGlzIHBhdGggY291bGQgcHJvZHVjZSBhIGR1cGxpY2F0ZSB3YXJuaW5nLiBUaGUKQEAgLTEw
Nyw3ICsxMDgsOCBAQCBib29sIEpTQ2hlY2tTY3JpcHRTeW50YXgoSlNDb250ZXh0UmVmIGN0CiAg
ICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhl
Yywgc3ludGF4RXhjZXB0aW9uKTsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAg
ICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVw
b3J0QVBJRXhjZXB0aW9uKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CisgICAgICAgIEV4Y2VwdGlv
biogZXhjZXB0aW9uID0gRXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgc3ludGF4RXhjZXB0
aW9uKTsKKyAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiAjZW5kaWYKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QAogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRhdGVDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSWRlbnRp
Zmllci5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKQEAgLTYxLDYgKzYyLDIx
IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKK3N0YXRpYyBib29sIGhhbmRsZUV4Y2VwdGlv
bklmTmVlZGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVJlZiogcmV0dXJuZWRFeGNlcHRpb25S
ZWYpCit7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEV4Y2VwdGlv
biogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIGlmIChyZXR1cm5lZEV4
Y2VwdGlvblJlZikKKyAgICAgICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvblJlZiA9IHRvUmVmKGV4
ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgICAgIGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVj
LCBleGNlcHRpb24pOworI2VuZGlmCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIEpTQ2xhc3NSZWYgSlNDbGFzc0NyZWF0ZShjb25zdCBKU0NsYXNz
RGVmaW5pdGlvbiogZGVmaW5pdGlvbikKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CkBA
IC0xNDgsMTYgKzE2NCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUZ1bmN0aW9uKEpTQ29u
dGUKICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhleGVjLCBib2R5LT5zdHJpbmcoKSkpOwogCiAg
ICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgYXJncywgbmFtZUlELCBzb3VyY2VVUkwgPyBzb3VyY2VVUkwtPnN0
cmluZygpIDogU3RyaW5nKCksIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFz
ZWRJbnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcjo6Zmlyc3QoKSkpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAg
ICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAg
ICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5y
ZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYg
KGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3Vs
dCA9IDA7Ci0gICAgfQogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQogCkBAIC0xODAsMTYg
KzE4OCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUFycmF5KEpTQ29udGV4dFIKICAgICB9
IGVsc2UKICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKIAot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAg
ICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQot
ICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAg
aWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJl
c3VsdCA9IDA7Ci0gICAgfQogCiAgICAgcmV0dXJuIHRvUmVmKHJlc3VsdCk7CiB9CkBAIC0yMDgs
MTYgKzIwOCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZURhdGUoSlNDb250ZXh0UmUKICAg
ICAgICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBhcmd1bWVudHNbaV0pKTsKIAogICAgIEpT
T2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3REYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgYXJnTGlzdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAg
aWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGNl
cHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25W
YWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywgZXhj
ZXB0aW9uKSkKICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICB9CiAKICAgICByZXR1cm4gdG9SZWYo
cmVzdWx0KTsKIH0KQEAgLTIzNSwxNiArMjI3LDggQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtl
RXJyb3IoSlNDb250ZXh0UgogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCk7CiAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2Fn
ZSk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9u
KQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsK
LSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRp
ZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAg
ICAgICByZXN1bHQgPSAwOwotICAgIH0KIAogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQpA
QCAtMjYzLDE2ICsyNDcsOCBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VSZWdFeHAoSlNDb250
ZXh0CiAgICAgICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgYXJndW1lbnRzW2ldKSk7CiAK
ICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0UmVnRXhwKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgIGFyZ0xpc3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7
Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYo
ZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwot
I2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFs
T2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywg
ZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVk
KGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQogICAgIAogICAg
IHJldHVybiB0b1JlZihyZXN1bHQpOwogfQpAQCAtMzM5LDE1ICszMTUsNyBAQCBKU1ZhbHVlUmVm
IEpTT2JqZWN0R2V0UHJvcGVydHkoSlNDb250ZXh0CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0g
dG9KUyhvYmplY3QpOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNPYmplY3QtPmdldChleGVj
LCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMt
PmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2Vw
dGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+
dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhj
ZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0KKyAgICBoYW5kbGVF
eGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVybiB0b1JlZihleGVj
LCBqc1ZhbHVlKTsKIH0KIApAQCAtMzcyLDE1ICszNDAsNyBAQCB2b2lkIEpTT2JqZWN0U2V0UHJv
cGVydHkoSlNDb250ZXh0UmVmIGN0CiAgICAgICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5w
dXQoanNPYmplY3QsIGV4ZWMsIG5hbWUsIGpzVmFsdWUsIHNsb3QpOwogICAgIH0KIAotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAg
ICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBv
cnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAg
IGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CiAKIEpTVmFsdWVS
ZWYgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RS
ZWYgb2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CkBAIC0zOTUsMTUgKzM1NSw3IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5k
ZXgoSlMKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAKICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSBqc09iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5SW5kZXgpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAg
ICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBv
cnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAg
IGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIHRv
UmVmKGV4ZWMsIGpzVmFsdWUpOwogfQogCkBAIC00MjEsMTUgKzM3Myw3IEBAIHZvaWQgSlNPYmpl
Y3RTZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXgKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pT
KGV4ZWMsIHZhbHVlKTsKICAgICAKICAgICBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJ
bmRleChqc09iamVjdCwgZXhlYywgcHJvcGVydHlJbmRleCwganNWYWx1ZSwgZmFsc2UpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAg
ICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAg
ICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5y
ZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQor
ICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CiAKIGJvb2wg
SlNPYmplY3REZWxldGVQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmpl
Y3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAt
NDQ0LDE1ICszODgsNyBAQCBib29sIEpTT2JqZWN0RGVsZXRlUHJvcGVydHkoSlNDb250ZXh0UmVm
CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCiAgICAgYm9vbCByZXN1
bHQgPSBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoanNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhl
Yy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhj
ZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVj
LT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElF
eGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAgIGhhbmRs
ZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtNjE2LDE2ICs1NTIsOCBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0Q2FsbEFzRnVuY3Rp
b24oSlNDb250CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSB0
b1JlZihleGVjLCBjYWxsKGV4ZWMsIGpzT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVGhp
c09iamVjdCwgYXJnTGlzdCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAg
ICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAg
IGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhj
ZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
VmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4
Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTY1NywxNiArNTg1LDggQEAgSlNPYmplY3RSZWYgSlNPYmplY3RDYWxsQXNDb25z
dHJ1Y3RvcihKUwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgaSsr
KQogICAgICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGFyZ3VtZW50c1tpXSkpOwogICAg
IEpTT2JqZWN0UmVmIHJlc3VsdCA9IHRvUmVmKGNvbnN0cnVjdChleGVjLCBqc09iamVjdCwgY29u
c3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJnTGlzdCkpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhj
ZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVu
dHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRp
b24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlv
bklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHRSZWYuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
CiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiVk0u
aCIKICNpbmNsdWRlICJKU1NjcmlwdFJlZlByaXZhdGUuaCIKQEAgLTE0MiwxMiArMTQzLDEyIEBA
IEpTVmFsdWVSZWYgSlNTY3JpcHRFdmFsdWF0ZShKU0NvbnRleHRSZWYKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIEpT
VmFsdWUgaW50ZXJuYWxFeGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBpbnRlcm5hbEV4Y2VwdGlv
bjsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHRoaXNWYWx1ZVJlZiA/IHRvSlMoZXhlYywgdGhp
c1ZhbHVlUmVmKSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0
ZShleGVjLCBTb3VyY2VDb2RlKHNjcmlwdCksIHRoaXNWYWx1ZSwgJmludGVybmFsRXhjZXB0aW9u
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGV4ZWMsIFNvdXJjZUNvZGUoc2NyaXB0
KSwgdGhpc1ZhbHVlLCBpbnRlcm5hbEV4Y2VwdGlvbik7CiAgICAgaWYgKGludGVybmFsRXhjZXB0
aW9uKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0g
dG9SZWYoZXhlYywgaW50ZXJuYWxFeGNlcHRpb24pOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IHRvUmVmKGV4ZWMsIGludGVybmFsRXhjZXB0aW9uLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIEFTU0VSVChyZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1ZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWYWx1ZS5tbQkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZhbHVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW1wb3J0
ICJBUElDYXN0LmgiCiAjaW1wb3J0ICJEYXRlSW5zdGFuY2UuaCIKICNpbXBvcnQgIkVycm9yLmgi
CisjaW1wb3J0ICJFeGNlcHRpb24uaCIKICNpbXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCiAjaW1w
b3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZUludGVy
bmFsLmgiCkBAIC02NDUsOSArNjQ2LDEwIEBAIEpTQ29udGFpbmVyQ29udmVydG9yOjpUYXNrIEpT
Q29udGFpbmVyQ28KIH0KIAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotc3RhdGljIHZv
aWQgcmVwb3J0RXhjZXB0aW9uVG9JbnNwZWN0b3IoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQs
IEpTQzo6SlNWYWx1ZSBleGNlcHRpb24pCitzdGF0aWMgdm9pZCByZXBvcnRFeGNlcHRpb25Ub0lu
c3BlY3RvcihKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlKQogewogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAg
ICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246OmNyZWF0ZShleGVj
LT52bSgpLCBleGNlcHRpb25WYWx1ZSk7CiAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bik7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJl
Zi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVm
LmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Zh
bHVlUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAi
QVBJQ2FzdC5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bi5oIgogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCkBAIC01Miw2ICs1MywyMSBAQAogCiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCitzdGF0aWMgYm9vbCBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVSZWYqIHJldHVybmVkRXhjZXB0aW9uUmVmKQoreworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlv
biA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb25SZWYp
CisgICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb25SZWYgPSB0b1JlZihleGVjLCBleGNlcHRp
b24tPnZhbHVlKCkpOworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQorICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
KTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCiAjaWYgUExBVEZPUk0oTUFDKQogc3RhdGljIGJvb2wgZXZlcm5vdGVIYWNrTmVlZGVk
KCkKIHsKQEAgLTIyNCwxNSArMjQwLDggQEAgYm9vbCBKU1ZhbHVlSXNFcXVhbChKU0NvbnRleHRS
ZWYgY3R4LCBKUwogICAgIEpTVmFsdWUganNCID0gdG9KUyhleGVjLCBiKTsKIAogICAgIGJvb2wg
cmVzdWx0ID0gSlNWYWx1ZTo6ZXF1YWwoZXhlYywganNBLCBqc0IpOyAvLyBmYWxzZSBpZiBhbiBl
eGNlcHRpb24gaXMgdGhyb3duCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAg
aWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGNl
cHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25W
YWx1ZSk7Ci0jZW5kaWYKLSAgICB9CisgICAgaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywg
ZXhjZXB0aW9uKTsKKyAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNjYsMTUgKzI3
NSw3IEBAIGJvb2wgSlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0cnVjdG9yKEpTQ28KICAgICBpZiAo
IWpzQ29uc3RydWN0b3ItPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmltcGxlbWVudHNIYXNJbnN0
YW5jZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCByZXN1bHQgPSBqc0NvbnN0
cnVjdG9yLT5oYXNJbnN0YW5jZShleGVjLCBqc1ZhbHVlKTsgLy8gZmFsc2UgaWYgYW4gZXhjZXB0
aW9uIGlzIHRocm93bgotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBK
U1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChl
eGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9u
VmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUp
OwotI2VuZGlmCi0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2Vw
dGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzY4LDE2ICszNjksOCBAQCBKU1N0
cmluZ1JlZiBKU1ZhbHVlQ3JlYXRlSlNPTlN0cmluZyhKU0NvCiAgICAgU3RyaW5nIHJlc3VsdCA9
IEpTT05TdHJpbmdpZnkoZXhlYywgdmFsdWUsIGluZGVudCk7CiAgICAgaWYgKGV4Y2VwdGlvbikK
ICAgICAgICAgKmV4Y2VwdGlvbiA9IDA7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVj
LCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmpl
Y3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNl
cHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhl
YywgZXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogICAgIHJldHVybiBPcGFx
dWVKU1N0cmluZzo6Y3JlYXRlKHJlc3VsdCkubGVha1JlZigpOwogfQogCkBAIC00MDYsMTYgKzM5
OSw4IEBAIGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0eCwKICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKIAogICAgIGRvdWJsZSBudW1iZXIgPSBq
c1ZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewot
ICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAg
ICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywg
ZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVO
QUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0
aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMs
IGV4Y2VwdGlvbikpCiAgICAgICAgIG51bWJlciA9IFBOYU47Ci0gICAgfQogICAgIHJldHVybiBu
dW1iZXI7CiB9CiAKQEAgLTQzMSwxNiArNDE2LDggQEAgSlNTdHJpbmdSZWYgSlNWYWx1ZVRvU3Ry
aW5nQ29weShKU0NvbnRleAogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUp
OwogICAgIAogICAgIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gc3RyaW5nUmVmKE9wYXF1ZUpTU3Ry
aW5nOjpjcmVhdGUoanNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1
ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAg
ICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAg
ICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVw
b3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgorICAgIGlmICho
YW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAgICAgICBzdHJpbmdS
ZWYuY2xlYXIoKTsKLSAgICB9CiAgICAgcmV0dXJuIHN0cmluZ1JlZi5yZWxlYXNlKCkubGVha1Jl
ZigpOwogfQogCkBAIC00NTYsMTYgKzQzMyw4IEBAIEpTT2JqZWN0UmVmIEpTVmFsdWVUb09iamVj
dChKU0NvbnRleHRSZWYKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsK
ICAgICAKICAgICBKU09iamVjdFJlZiBvYmplY3RSZWYgPSB0b1JlZihqc1ZhbHVlLnRvT2JqZWN0
KGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1
ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0
aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVl
KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNl
bmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQog
ICAgICAgICBvYmplY3RSZWYgPSAwOwotICAgIH0KICAgICByZXR1cm4gb2JqZWN0UmVmOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4
NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcxMiw2ICs3MTIsNyBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJvckhhbmRsaW5nU2NvcGUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJvckluc3RhbmNlLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JQcm90b3R5cGUu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb24uY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb25GdXp6LmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uSGVscGVy
cy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4ZWN1dGFibGUu
Y3BwIiAvPgpAQCAtMTUwMyw2ICsxNTA0LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcRXJyb3JIYW5kbGluZ1Njb3BlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXEVycm9ySW5zdGFuY2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcRXJyb3JQcm90b3R5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEV4Y2VwdGlvbkZ1enouaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcRXhjZXB0aW9uSGVscGVycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxFeGVjdXRhYmxlLmgiIC8+CkBAIC0xODI3LDQgKzE4MjksNCBAQAogICA8SW1wb3J0
R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChW
Q1RhcmdldHNQYXRoKVxCdWlsZEN1c3RvbWl6YXRpb25zXG1hc20udGFyZ2V0cyIgLz4KICAgPC9J
bXBvcnRHcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1By
b2plY3Q+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ai5maWx0ZXJzCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtp
bmcgY29weSkKQEAgLTE2OTgsNiArMTY5OCw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHVmFsdWVTdHJlbmd0aC5jcHAiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4K
ICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhj
ZXB0aW9uLmNwcCI+CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsQ29t
cGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uRnV6ei5j
cHAiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBA
IC00MTkwLDYgKzQxOTMsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Zh
bHVlU3RyZW5ndGguaCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb24uaCI+Cisg
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uRnV6ei5oIj4KICAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtNDQ4NSw0ICs0NDkxLDQg
QEAKICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9NQVNNPgogICA8L0l0ZW1Hcm91
cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg1MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTE2NjAsNiArMTY2MCw4IEBACiAJCUU0OURDMTZEMTJFRjI5
NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNDkxMkVGMjYxQTAwMTg0QTFGIC8q
IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRBMDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlv
blRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuY3BwICovOyB9OwogCQlGRTBENEEwOTFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4
dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFMEQ0QTA3MUFCQTI0MzcwMDJGNTRCRiAvKiBHbG9iYWxDb250ZXh0V2l0
aEZpbmFsaXplclRlc3QuY3BwICovOyB9OworCQlGRTFDMEZGRDFCMTkzRTk4MDBCNTNGQ0EgLyog
RXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUxQzBGRkYxQjE5NEZEMTAwQjUz
RkNBIC8qIEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0aW9uLmNwcCAqLzsg
fTsKIAkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUIxNUYwNEE5NTAw
REYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovOyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTM4NEVFNTFBRERC
N0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NEVFMTFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJW
TS5jcHAgKi87IH07CkBAIC0zNDYzLDYgKzM0NjUsOCBAQAogCQlGRTBENEEwNTFBQjhERDBBMDAy
RjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBFeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvRXhl
Y3V0aW9uVGltZUxpbWl0VGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTBE
NEEwNzFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEdsb2JhbENvbnRleHRXaXRo
RmluYWxpemVyVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvR2xvYmFsQ29udGV4dFdpdGhGaW5h
bGl6ZXJUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDgxQUJB
MjQzNzAwMkY1NEJGIC8qIEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3Qu
aDsgcGF0aCA9IEFQSS90ZXN0cy9HbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4
Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxQzBGRkUxQjE5NEZEMTAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNl
cHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1
MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJ
bnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7
IHBhdGggPSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFMzg0RUUxMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9sbGFyVk0uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDQyNyw2ICs0NDMxLDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAw
RjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5
NyAvKiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3
IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCisJCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5oICovLAorCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRp
b24uY3BwICovLAogCQkJCTBGMTJERTBEMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6
LmNwcCAqLywKIAkJCQkwRjEyREUwRTE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5o
ICovLAogCQkJCTE0MjlEODc3MEVEMjFBQ0QwMEI4OTYxOSAvKiBFeGNlcHRpb25IZWxwZXJzLmNw
cCAqLywKQEAgLTU2MjQsNiArNTYzMCw3IEBACiAJCQkJRkU0RDU1QjgxQUU3MTZDQTAwNTJFNDU5
IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1MDY4NjUxQUUyNDYz
OTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzQ0
MkNCMjUxQTZDREI4QzAwNUQzRDdDIC8qIEpTSW5wdXRzLmpzb24gaW4gSGVhZGVycyAqLywKKwkJ
CQlGRTFDMEZGRDFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tM
b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcxMEUxOUY2REY4MTAwOThGNUVDIC8q
IEluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIGluIEhlYWRlcnMgKi8sCkBA
IC03NDA4LDYgKzc0MTUsNyBAQAogCQkJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1By
b21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENEMjE4NkY4QTkzMDA5
NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0
RTFFMTdCRUUyMkUwMDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkUxQzBGRkYxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3MDlGQjg2QjFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENERTE4NzEyNThEMDA5NTVDMjQgLyogSlNQ
cm9taXNlUmVhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAw
OUYxN0QwIC8qIEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1
bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMywxMSArMTMzLDExIEBAIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2EKICAgICAgICAgcmV0dXJuIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlKCk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICBKU1ZhbHVl
IGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICBpZiAobV9jYWxsSGFu
ZGxlcikKLSAgICAgICAgcmVzdWx0ID0gbV9jYWxsSGFuZGxlcihtX2V4ZWMsIGZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIG1fYXJndW1lbnRzLCAmZXhjZXB0aW9uKTsK
KyAgICAgICAgcmVzdWx0ID0gbV9jYWxsSGFuZGxlcihtX2V4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIG1fYXJndW1lbnRzLCBleGNlcHRpb24pOwogICAgIGVs
c2UKLSAgICAgICAgcmVzdWx0ID0gSlNDOjpjYWxsKG1fZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBl
LCBjYWxsRGF0YSwgdGhpc09iamVjdCwgbV9hcmd1bWVudHMsICZleGNlcHRpb24pOworICAgICAg
ICByZXN1bHQgPSBKU0M6OmNhbGwobV9leGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCB0aGlzT2JqZWN0LCBtX2FyZ3VtZW50cywgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRp
b24pIHsKICAgICAgICAgaGFkRXhjZXB0aW9uID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmgJKHJldmlzaW9u
IDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlv
bkNhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogCiBjbGFz
cyBKU19FWFBPUlRfUFJJVkFURSBTY3JpcHRGdW5jdGlvbkNhbGwgOiBwdWJsaWMgU2NyaXB0Q2Fs
bEFyZ3VtZW50SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTVmFsdWUgKCpT
Y3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1Zh
bHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNh
bGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdM
aXN0JiBhcmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbik7CisgICAgdHlwZWRlZiBKU0M6OkpT
VmFsdWUgKCpTY3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25z
dCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3Qg
SlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkV4Y2VwdGlvbiomIGV4Y2VwdGlvbik7CiAgICAgU2Ny
aXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBTY3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyIGhhbmRsZXIgPSBudWxscHRyKTsK
ICAgICBTY3JpcHRWYWx1ZSBjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbik7CiAgICAgU2NyaXB0VmFs
dWUgY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyAr
MTEzLDcgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1c2hfd2l0aF9zY29wZSIsICJs
ZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcG9wX3Njb3BlIiwgImxl
bmd0aCIgOiAyIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXNoX25hbWVfc2NvcGUi
LCAibGVuZ3RoIiA6IDUgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NhdGNoIiwgImxl
bmd0aCIgOiAyIH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYXRjaCIsICJsZW5ndGgi
IDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdGhyb3ciLCAibGVuZ3RoIiA6IDIg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Rocm93X3N0YXRpY19lcnJvciIsICJsZW5n
dGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVidWciLCAibGVuZ3RoIiA6
IDMgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZVVzZURlZi5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcgKzMwMyw2IEBA
IHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2RlQmwKICAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGU6CiAgICAgY2FzZSBvcF9zdHJjYXQ6CiAgICAgY2FzZSBvcF90b19wcmltaXRp
dmU6Ci0gICAgY2FzZSBvcF9jYXRjaDoKICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgogICAgIGNh
c2Ugb3BfbmV3X2FycmF5OgogICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKQEAgLTM3NCw2
ICszNzMsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAg
ICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBvcF9jYXRj
aDoKICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OiB7CiAgICAgICAgIGZ1
bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCk7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2Rl
SUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0ODQsNyArMTQ4NCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBvcF9jYXRjaDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJh
bmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYXRjaCIsIHIwKTsKKyAgICAgICAgICAgIGlu
dCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2F0Y2giKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRh
dGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3Ro
cm93OiB7CkBAIC0yODc4LDcgKzI4ODAsNyBAQCBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVk
UmVwbGFjZW1lbnQoCiB9CiAjZW5kaWYKIAotSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxl
ckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorSGFuZGxlckluZm8q
IENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0LCBib29sIHJlcXVpcmVDYXRjaEhhbmRsZXIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYnl0
ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogCkBAIC0yODg4LDYgKzI4OTAs
OSBAQCBIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvCiAgICAgVmVjdG9y
PEhhbmRsZXJJbmZvPiYgZXhjZXB0aW9uSGFuZGxlcnMgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhjZXB0aW9uSGFuZGxlcnMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25I
YW5kbGVyc1tpXTsKKyAgICAgICAgaWYgKHJlcXVpcmVDYXRjaEhhbmRsZXIgJiYgIWhhbmRsZXIu
aXNDYXRjaEhhbmRsZXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIC8vIEhh
bmRsZXJzIGFyZSBvcmRlcmVkIGlubmVybW9zdCBmaXJzdCwgc28gdGhlIGZpcnN0IGhhbmRsZXIg
d2UgZW5jb3VudGVyCiAgICAgICAgIC8vIHRoYXQgY29udGFpbnMgdGhlIHNvdXJjZSBhZGRyZXNz
IGlzIHRoZSBjb3JyZWN0IGhhbmRsZXIgdG8gdXNlLgogICAgICAgICBpZiAoaGFuZGxlci5zdGFy
dCA8PSBieXRlY29kZU9mZnNldCAmJiBoYW5kbGVyLmVuZCA+IGJ5dGVjb2RlT2Zmc2V0KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODUsNyArMTg1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
aW5kZXggPj0gbV9udW1WYXJzOwogICAgIH0KIAotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9y
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEhhbmRsZXJJbmZv
KiBoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGJvb2wg
cmVxdWlyZUNhdGNoSGFuZGxlciA9IGZhbHNlKTsKICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyRm9y
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogICAgIHVuc2lnbmVkIGNv
bHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKICAg
ICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0LCBpbnQmIGRpdm90LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0hhbmRsZXJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0hhbmRsZXJJbmZvLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIGVudW0gY2xhc3MgSGFuZGxlclR5cGUgewogc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7CiAg
ICAgSGFuZGxlclR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEhhbmRsZXJU
eXBlPih0eXBlQml0cyk7IH0KICAgICB2b2lkIHNldFR5cGUoSGFuZGxlclR5cGUgdHlwZSkgeyB0
eXBlQml0cyA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKTsgfQotICAgIAorCiAgICAgY29u
c3QgY2hhciogdHlwZU5hbWUoKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKQEAg
LTU1LDkgKzU1LDkgQEAgc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIAorCiAgICAgYm9vbCBpc0NhdGNoSGFuZGxl
cigpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBIYW5kbGVyVHlwZTo6Q2F0Y2g7IH0KLSAgICAK
KwogICAgIHVpbnQzMl90IHN0YXJ0OwogICAgIHVpbnQzMl90IGVuZDsKICAgICB1aW50MzJfdCB0
YXJnZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1MjgsNyArMjUyOCw3IEBAIFRyeURhdGEqIEJ5dGVjb2RlR2VuZXJhdG9y
OjpwdXNoVHJ5KExhYmUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kRW1pdENhdGNoKFRyeURhdGEqIHRyeURhdGEsIFJlZ2lz
dGVySUQqIHRhcmdldFJlZ2lzdGVyLCBMYWJlbCogZW5kLCBIYW5kbGVyVHlwZSBoYW5kbGVyVHlw
ZSkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFRyeUFuZEVtaXRDYXRjaChUcnlEYXRhKiB0
cnlEYXRhLCBSZWdpc3RlcklEKiBleGNlcHRpb25SZWdpc3RlciwgUmVnaXN0ZXJJRCogdGhyb3du
VmFsdWVSZWdpc3RlciwgTGFiZWwqIGVuZCwgSGFuZGxlclR5cGUgaGFuZGxlclR5cGUpCiB7CiAg
ICAgbV91c2VzRXhjZXB0aW9ucyA9IHRydWU7CiAgICAgCkBAIC0yNTQ2LDggKzI1NDYsOCBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kCiAgICAgdHJ5UmFuZ2UudHJ5
RGF0YS0+aGFuZGxlclR5cGUgPSBoYW5kbGVyVHlwZTsKIAogICAgIGVtaXRPcGNvZGUob3BfY2F0
Y2gpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXRSZWdpc3Rlci0+aW5kZXgoKSk7
Ci0gICAgcmV0dXJuIHRhcmdldFJlZ2lzdGVyOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChl
eGNlcHRpb25SZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRo
cm93blZhbHVlUmVnaXN0ZXItPmluZGV4KCkpOwogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC0yNzYw
LDcgKzI3NjAsMTEgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAog
ICAgICAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVlbmNlIGZvciB0aHJvdy1lZCBjb250cm9sIGZs
b3cuCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gY2F0Y2hIZXJlID0gZW1p
dExhYmVsKG5ld0xhYmVsKCkuZ2V0KCkpOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGV4Y2VwdGlvblJlZ2lzdGVyID0gcG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIG5ld1RlbXBv
cmFyeSgpLCBjYXRjaEhlcmUuZ2V0KCksIEhhbmRsZXJUeXBlOjpTeW50aGVzaXplZEZpbmFsbHkp
OworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gbmV3
VGVtcG9yYXJ5KCk7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhyb3duVmFsdWVS
ZWdpc3RlciA9IG5ld1RlbXBvcmFyeSgpOworICAgICAgICAgICAgcG9wVHJ5QW5kRW1pdENhdGNo
KHRyeURhdGEsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLAorICAgICAgICAgICAgICAgIHRocm93
blZhbHVlUmVnaXN0ZXIuZ2V0KCksIGNhdGNoSGVyZS5nZXQoKSwgSGFuZGxlclR5cGU6OlN5bnRo
ZXNpemVkRmluYWxseSk7CisKICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gY2F0Y2hEb25lID0g
bmV3TGFiZWwoKTsKIAogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVybk1ldGhv
ZCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlO
YW1lcygpLnJldHVybktleXdvcmQpOwpAQCAtMjc3OCw3ICsyNzgyLDggQEAgdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAogICAgICAgICAgICAgZW1pdFRocm93KGV4Y2Vw
dGlvblJlZ2lzdGVyLmdldCgpKTsKIAogICAgICAgICAgICAgLy8gQWJzb3JiIGV4Y2VwdGlvbi4K
LSAgICAgICAgICAgIHBvcFRyeUFuZEVtaXRDYXRjaChyZXR1cm5DYWxsVHJ5RGF0YSwgbmV3VGVt
cG9yYXJ5KCksIGNhdGNoRG9uZS5nZXQoKSwgSGFuZGxlclR5cGU6OlN5bnRoZXNpemVkRmluYWxs
eSk7CisgICAgICAgICAgICBwb3BUcnlBbmRFbWl0Q2F0Y2gocmV0dXJuQ2FsbFRyeURhdGEsIG5l
d1RlbXBvcmFyeSgpLAorICAgICAgICAgICAgICAgIG5ld1RlbXBvcmFyeSgpLCBjYXRjaERvbmUu
Z2V0KCksIEhhbmRsZXJUeXBlOjpTeW50aGVzaXplZEZpbmFsbHkpOwogICAgICAgICAgICAgZW1p
dFRocm93KGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKICAgICAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1Myw3ICs1NTMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gU3RhcnQgYSB0cnkgYmxvY2suICdzdGFy
dCcgbXVzdCBoYXZlIGJlZW4gZW1pdHRlZC4KICAgICAgICAgVHJ5RGF0YSogcHVzaFRyeShMYWJl
bCogc3RhcnQpOwogICAgICAgICAvLyBFbmQgYSB0cnkgYmxvY2suICdlbmQnIG11c3QgaGF2ZSBi
ZWVuIGVtaXR0ZWQuCi0gICAgICAgIFJlZ2lzdGVySUQqIHBvcFRyeUFuZEVtaXRDYXRjaChUcnlE
YXRhKiwgUmVnaXN0ZXJJRCogdGFyZ2V0UmVnaXN0ZXIsIExhYmVsKiBlbmQsIEhhbmRsZXJUeXBl
KTsKKyAgICAgICAgdm9pZCBwb3BUcnlBbmRFbWl0Q2F0Y2goVHJ5RGF0YSosIFJlZ2lzdGVySUQq
IGV4Y2VwdGlvblJlZ2lzdGVyLCBSZWdpc3RlcklEKiB0aHJvd25WYWx1ZVJlZ2lzdGVyLCBMYWJl
bCogZW5kLCBIYW5kbGVyVHlwZSk7CiAKICAgICAgICAgdm9pZCBlbWl0VGhyb3coUmVnaXN0ZXJJ
RCogZXhjKQogICAgICAgICB7IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODgxLDcgKzI4ODEsOSBAQCB2b2lkIFRyeU5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyCiAKICAgICAgICAgLy8gVW5jYXVnaHQgZXhjZXB0aW9uIHBhdGg6IHRoZSBj
YXRjaCBibG9jay4KICAgICAgICAgUmVmUHRyPExhYmVsPiBoZXJlID0gZ2VuZXJhdG9yLmVtaXRM
YWJlbChnZW5lcmF0b3IubmV3TGFiZWwoKS5nZXQoKSk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBleGNlcHRpb25SZWdpc3RlciA9IGdlbmVyYXRvci5wb3BUcnlBbmRFbWl0Q2F0Y2godHJ5
RGF0YSwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBoZXJlLmdldCgpLCBIYW5kbGVyVHlwZTo6
Q2F0Y2gpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVnaXN0ZXIgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aHJv
d25WYWx1ZVJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBnZW5l
cmF0b3IucG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgp
LCB0aHJvd25WYWx1ZVJlZ2lzdGVyLmdldCgpLCBoZXJlLmdldCgpLCBIYW5kbGVyVHlwZTo6Q2F0
Y2gpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fZmluYWxseUJsb2NrKSB7CiAgICAgICAgICAg
ICAvLyBJZiB0aGUgY2F0Y2ggYmxvY2sgdGhyb3dzIGFuIGV4Y2VwdGlvbiBhbmQgd2UgaGF2ZSBh
IGZpbmFsbHkgYmxvY2ssIHRoZW4gdGhlIGZpbmFsbHkKQEAgLTI4ODksNyArMjg5MSw3IEBAIHZv
aWQgVHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKICAgICAgICAgICAgIHRyeURh
dGEgPSBnZW5lcmF0b3IucHVzaFRyeShoZXJlLmdldCgpKTsKICAgICAgICAgfQogCi0gICAgICAg
IGdlbmVyYXRvci5lbWl0UHVzaENhdGNoU2NvcGUoZ2VuZXJhdG9yLnNjb3BlUmVnaXN0ZXIoKSwg
bV9leGNlcHRpb25JZGVudCwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksIERvbnREZWxldGUpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdFB1c2hDYXRjaFNjb3BlKGdlbmVyYXRvci5zY29wZVJlZ2lz
dGVyKCksIG1fdGhyb3duVmFsdWVJZGVudCwgdGhyb3duVmFsdWVSZWdpc3Rlci5nZXQoKSwgRG9u
dERlbGV0ZSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KG1fdHJ5
QmxvY2stPmVuZE9mZnNldCgpICsgMSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3Qs
IG1fY2F0Y2hCbG9jayk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UG9wU2NvcGUoZ2VuZXJhdG9y
LnNjb3BlUmVnaXN0ZXIoKSk7CkBAIC0yOTEyLDEwICsyOTE0LDEyIEBAIHZvaWQgVHJ5Tm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGZp
bmFsbHlFbmRMYWJlbC5nZXQoKSk7CiAKICAgICAgICAgLy8gVW5jYXVnaHQgZXhjZXB0aW9uIHBh
dGg6IGludm9rZSB0aGUgZmluYWxseSBibG9jaywgdGhlbiByZS10aHJvdyB0aGUgZXhjZXB0aW9u
LgotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcEV4Y2VwdGlvblJlZ2lzdGVyID0gZ2Vu
ZXJhdG9yLnBvcFRyeUFuZEVtaXRDYXRjaCh0cnlEYXRhLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIHByZUZpbmFsbHlMYWJlbC5nZXQoKSwgSGFuZGxlclR5cGU6OkZpbmFsbHkpOworICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aHJvd25WYWx1ZVJlZ2lzdGVy
ID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBnZW5lcmF0b3IucG9wVHJ5QW5k
RW1pdENhdGNoKHRyeURhdGEsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLCB0aHJvd25WYWx1ZVJl
Z2lzdGVyLmdldCgpLCBwcmVGaW5hbGx5TGFiZWwuZ2V0KCksIEhhbmRsZXJUeXBlOjpGaW5hbGx5
KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3coZmluYWxseVN0YXJ0
T2Zmc2V0KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9maW5hbGx5QmxvY2sp
OwotICAgICAgICBnZW5lcmF0b3IuZW1pdFRocm93KHRlbXBFeGNlcHRpb25SZWdpc3Rlci5nZXQo
KSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VGhyb3coZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkp
OwogCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZmluYWxseUVuZExhYmVsLmdldCgpKTsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cobV9maW5hbGx5QmxvY2st
PmVuZE9mZnNldCgpICsgMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw3ICs0ODcsNyBA
QCBib29sIERlYnVnZ2VyOjpoYXNCcmVha3BvaW50KFNvdXJjZUlEIHNvCiAgICAgLy8gc28gbWFr
ZSBpdCBsb29rcyBsaWtlIHRoZSBkZWJ1Z2dlciBpcyBhbHJlYWR5IHBhdXNlZC4KICAgICBUZW1w
b3JhcnlQYXVzZWRTdGF0ZSBwYXVzZWRTdGF0ZSgqdGhpcyk7CiAKLSAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICBEZWJ1Z2dlckNhbGxGcmFtZSog
ZGVidWdnZXJDYWxsRnJhbWUgPSBjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUoKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGRlYnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0ZShicmVha3BvaW50LT5jb25k
aXRpb24sIGV4Y2VwdGlvbik7CiAKQEAgLTY5NSwxMyArNjk1LDEzIEBAIHZvaWQgRGVidWdnZXI6
OnBhdXNlSWZOZWVkZWQoQ2FsbEZyYW1lKiAKICAgICB9CiB9CiAKLXZvaWQgRGVidWdnZXI6OmV4
Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNlcHRpb24sIGJvb2wgaGFz
SGFuZGxlcikKK3ZvaWQgRGVidWdnZXI6OmV4Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNWYWx1ZSBleGNlcHRpb24sIGJvb2wgaGFzQ2F0Y2hIYW5kbGVyKQogewogICAgIGlmIChtX2lz
UGF1c2VkKQogICAgICAgICByZXR1cm47CiAKICAgICBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHJl
YXNvbigqdGhpcywgUGF1c2VkRm9yRXhjZXB0aW9uKTsKLSAgICBpZiAobV9wYXVzZU9uRXhjZXB0
aW9uc1N0YXRlID09IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8IChtX3BhdXNlT25FeGNlcHRpb25z
U3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAmJiAhaGFzSGFuZGxlcikpIHsKKyAg
ICBpZiAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8
IChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAm
JiAhaGFzQ2F0Y2hIYW5kbGVyKSkgewogICAgICAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0g
dHJ1ZTsKICAgICAgICAgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCShyZXZp
c2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdm9pZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgU291cmNlUHJvdmlkZXIqLCBpbnQgZXJy
b3JMaW5lTnVtYmVyLCBjb25zdCBXVEY6OlN0cmluZyYgZXJyb3JNZXNzYWdlKSA9IDA7CiAKLSAg
ICB2b2lkIGV4Y2VwdGlvbihDYWxsRnJhbWUqLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBib29s
IGhhc0hhbmRsZXIpOworICAgIHZvaWQgZXhjZXB0aW9uKENhbGxGcmFtZSosIEpTVmFsdWUgZXhj
ZXB0aW9uVmFsdWUsIGJvb2wgaGFzQ2F0Y2hIYW5kbGVyKTsKICAgICB2b2lkIGF0U3RhdGVtZW50
KENhbGxGcmFtZSopOwogICAgIHZvaWQgY2FsbEV2ZW50KENhbGxGcmFtZSopOwogICAgIHZvaWQg
cmV0dXJuRXZlbnQoQ2FsbEZyYW1lKik7CkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhKU0dsb2JhbE9iamVj
dCopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUJyZWFrcG9pbnRI
aXQoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBCcmVha3BvaW50JikgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIGhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlvbihFeGVjU3RhdGUqLCBKU1Zh
bHVlIGV4Y2VwdGlvbikgY29uc3QgeyBVTlVTRURfUEFSQU0oZXhjZXB0aW9uKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24oRXhlY1N0YXRl
KiwgRXhjZXB0aW9uKikgY29uc3QgeyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBhdXNlKEpT
R2xvYmFsT2JqZWN0KiwgUmVhc29uRm9yUGF1c2UpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyRXZhbEVuYWJsZXIuaCIKICNpbmNsdWRl
ICJEZWJ1Z2dlclNjb3BlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaCIKQEAgLTE3Niw3ICsxNzcsNyBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZy
YW1lOjp0aGlzVmFsdWUoKSBjCiB9CiAKIC8vIEV2YWx1YXRlIHNvbWUgSmF2YVNjcmlwdCBjb2Rl
IGluIHRoZSBzY29wZSBvZiB0aGlzIGZyYW1lLgotSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6
ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIEpTVmFsdWUmIGV4Y2VwdGlvbikKK0pTVmFs
dWUgRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBFeGNl
cHRpb24qJiBleGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBtX2NhbGxGcmFtZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCShyZXZpc2lvbiAxODUxMTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IERlYnVnZ2VyU2NvcGU7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiB0eXBl
ZGVmIEV4ZWNTdGF0ZSBDYWxsRnJhbWU7CiAKQEAgLTY2LDcgKzY3LDcgQEAgcHVibGljOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBmdW5jdGlvbk5hbWUoKSBjb25zdDsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBUeXBlIHR5cGUoKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBK
U1ZhbHVlIHRoaXNWYWx1ZSgpIGNvbnN0OwotICAgIEpTVmFsdWUgZXZhbHVhdGUoY29uc3QgU3Ry
aW5nJiwgSlNWYWx1ZSYgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0
cmluZyYsIEV4Y2VwdGlvbiomKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9jYWxsRnJhbWU7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGludmFsaWRhdGUo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5LDkgKzEzOSw5IEBAIERlcHJlY2F0ZWQ6OlNjcmlwdE9iamVjdCBJbmpl
Y3RlZFNjcmlwdE0KICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NyaXB0U3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBKU1ZhbHVlIGdsb2JhbFRoaXNWYWx1ZSA9
IHNjcmlwdFN0YXRlLT5nbG9iYWxUaGlzVmFsdWUoKTsKIAotICAgIEpTVmFsdWUgZXZhbHVhdGlv
bkV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV2YWx1YXRpb25FeGNlcHRpb247CiAgICAgSW5z
cGVjdG9yRXZhbHVhdGVIYW5kbGVyIGV2YWx1YXRlSGFuZGxlciA9IG1fZW52aXJvbm1lbnQuZXZh
bHVhdGVIYW5kbGVyKCk7Ci0gICAgSlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gZXZhbHVhdGVIYW5k
bGVyKHNjcmlwdFN0YXRlLCBzb3VyY2VDb2RlLCBnbG9iYWxUaGlzVmFsdWUsICZldmFsdWF0aW9u
RXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBldmFsdWF0ZUhhbmRsZXIo
c2NyaXB0U3RhdGUsIHNvdXJjZUNvZGUsIGdsb2JhbFRoaXNWYWx1ZSwgZXZhbHVhdGlvbkV4Y2Vw
dGlvbik7CiAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgIHJldHVybiBEZXBy
ZWNhdGVkOjpTY3JpcHRPYmplY3QoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9u
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMyArMzMsMTQgQEAgY2xhc3MgU3RvcHdhdGNo
OwogfQogCiBuYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIFNvdXJjZUNv
ZGU7CiB9CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIEpTQzo6SlNWYWx1ZSAo
Kkluc3BlY3RvckZ1bmN0aW9uQ2FsbEhhbmRsZXIpKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IEpT
Qzo6Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6
OkFyZ0xpc3QmIGFyZ3MsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKTsKLXR5cGVkZWYgSlNDOjpK
U1ZhbHVlICgqSW5zcGVjdG9yRXZhbHVhdGVIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6U291cmNlQ29kZSYsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6SlNWYWx1ZSog
ZXhjZXB0aW9uKTsKK3R5cGVkZWYgSlNDOjpKU1ZhbHVlICgqSW5zcGVjdG9yRnVuY3Rpb25DYWxs
SGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEs
IEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpF
eGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbik7Cit0eXBlZGVmIEpTQzo6SlNWYWx1ZSAoKklu
c3BlY3RvckV2YWx1YXRlSGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJj
ZUNvZGUmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkV4Y2VwdGlvbiomIHJldHVybmVk
RXhjZXB0aW9uKTsKIAogY2xhc3MgSW5zcGVjdG9yRW52aXJvbm1lbnQgewogcHVibGljOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdElu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW5jbHVkZSAiQ29tcGxldGlvbi5oIgogI2luY2x1ZGUgIkNvbnNvbGVNZXNzYWdlLmgiCiAjaW5j
bHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5j
bHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKQEAgLTE4OCw3ICsxODksNyBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6CiAjZW5kaWYKIH0KIAotdm9p
ZCBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6OnJlcG9ydEFQSUV4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXhjZXB0aW9uKQordm9pZCBKU0dsb2JhbE9iamVjdElu
c3BlY3RvckNvbnRyb2xsZXI6OnJlcG9ydEFQSUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4
Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNl
cHRpb24oZXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAxLDcgKzIwMiw3IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjoKIAogICAgIC8vIEZJWE1FOiA8
aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNwZWN0b3I6IFNob3VsZCBub3QgZXZh
bHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCiAgICAgLy8gSWYgdGhpcyBpcyBh
IGN1c3RvbSBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRvIHRyeSBhbmQg
Z2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRpb24uCi0gICAg
U3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAg
IGlmIChKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OmxvZ1RvU3lzdGVtQ29uc29sZSgpKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmgJKHJldmlzaW9uIDE4
NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJ
bnNwZWN0b3JDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgY2xh
c3MgU3RvcHdhdGNoOwogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENvbnNvbGVDbGllbnQ7Citj
bGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsK
IGNsYXNzIEpTVmFsdWU7CkBAIC04MSw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElu
Y2x1ZGVzTmF0aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4Y2VwdGlvbnMoYm9vbCBpbmNsdWRl
c05hdGl2ZUNhbGxTdGFjaykgeyBtX2luY2x1ZGVOYXRpdmVDYWxsU3RhY2tXaXRoRXhjZXB0aW9u
cyA9IGluY2x1ZGVzTmF0aXZlQ2FsbFN0YWNrOyB9CiAKICAgICB2b2lkIHBhdXNlKCk7Ci0gICAg
dm9pZCByZXBvcnRBUElFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhj
ZXB0aW9uKTsKKyAgICB2b2lkIHJlcG9ydEFQSUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RXhjZXB0aW9uKik7CiAKICAgICBKU0M6OkNvbnNvbGVDbGllbnQqIGNvbnNvbGVDbGllbnQo
KSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmgJKHJldmlz
aW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxP
YmplY3RTY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBA
IHByaXZhdGU6CiAgICAgLy8gTk9URTogQ3VycmVudGx5IGFsbCBleGNlcHRpb25zIGFyZSByZXBv
cnRlZCBhdCB0aGUgQVBJIGJvdW5kYXJ5IHRocm91Z2ggcmVwb3J0QVBJRXhjZXB0aW9uLgogICAg
IC8vIFVudGlsIGEgdGltZSBjb21lcyB3aGVyZSBhbiBleGNlcHRpb24gY2FuIGJlIGNhdXNlZCBv
dXRzaWRlIG9mIHRoZSBBUEkgKGUuZy4gc2V0VGltZW91dAogICAgIC8vIG9yIHNvbWUgb3RoZXIg
YXN5bmMgb3BlcmF0aW9uIGluIGEgcHVyZSBKU0NvbnRleHQpIHdlIGNhbiBpZ25vcmUgZXhjZXB0
aW9ucyByZXBvcnRlZCBoZXJlLgotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZpcnR1
YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiop
IGNvbnN0IG92ZXJyaWRlIHsgfQogCiAgICAgTGlzdGVuZXJTZXQgbV9saXN0ZW5lcnM7CiAgICAg
SlNDOjpKU0dsb2JhbE9iamVjdCYgbV9nbG9iYWxPYmplY3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKICNpbmNsdWRlICJFcnJvci5oIgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJK
U0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBl
LmgiCkBAIC03NSw3ICs3Niw3IEBAIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6fkpTSmF2YVNjcmlw
dENhbGwKIAogSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2Vw
dGlvbjsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwoKS5ldmFsdWF0ZShleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIGV4Y2VwdGlvbik7CiAgICAgaWYgKGV4
Y2VwdGlvbikKICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRp
b24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2Fs
bEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
YXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5
R2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+dm1FbnRy
eUdsb2JhbE9iamVjdCgpOyB9CiAKICAgICBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7IH0KLSAgICBKU0M6OkpT
VmFsdWUgZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIEpTQzo6SlNWYWx1ZSYgZXhjZXB0
aW9uKSBjb25zdCAgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoc2NyaXB0
LCBleGNlcHRpb24pOyB9CisgICAgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0cmluZyYg
c2NyaXB0LCBKU0M6OkV4Y2VwdGlvbiomIGV4Y2VwdGlvbikgY29uc3QgIHsgcmV0dXJuIG1fZGVi
dWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKHNjcmlwdCwgZXhjZXB0aW9uKTsgfQogCiBwcml2YXRl
OgogICAgIEphdmFTY3JpcHRDYWxsRnJhbWUoUGFzc1JlZlB0cjxKU0M6OkRlYnVnZ2VyQ2FsbEZy
YW1lPik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxT
dGFja0ZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJTY3JpcHRDYWxsU3Rh
Y2tGYWN0b3J5LmgiCiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIlNjcmlwdEFyZ3VtZW50cy5oIgpAQCAtMTI4LDEwICsxMjksMTAgQEAgc3RhdGlj
IHZvaWQgZXh0cmFjdFNvdXJjZUluZm9ybWF0aW9uRnJvbQogICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CiB9CiAKLVBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxs
U3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUmIGV4
Y2VwdGlvbiwgc2l6ZV90IG1heFN0YWNrU2l6ZSkKK1Bhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNr
PiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uLCBzaXplX3QgbWF4U3RhY2tTaXplKQogewogICAg
IFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+IGZyYW1lczsKLSAgICBSZWZDb3VudGVkQXJyYXk8U3Rh
Y2tGcmFtZT4gc3RhY2tUcmFjZSA9IGV4ZWMtPnZtKCkuZXhjZXB0aW9uU3RhY2soKTsKKyAgICBS
ZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZSA9IGV4Y2VwdGlvbi0+c3RhY2so
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpICYmIGkgPCBt
YXhTdGFja1NpemU7IGkrKykgewogICAgICAgICB1bnNpZ25lZCBsaW5lOwogICAgICAgICB1bnNp
Z25lZCBjb2x1bW47CkBAIC0xNDEsOCArMTQyLDggQEAgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3Rh
Y2s+IGNyZWF0ZVNjcmlwdAogICAgIH0KIAogICAgIC8vIEZhbGxiYWNrIHRvIGdldHRpbmcgYXQg
bGVhc3QgdGhlIGxpbmUgYW5kIHNvdXJjZVVSTCBmcm9tIHRoZSBleGNlcHRpb24gb2JqZWN0IGlm
IGl0IGhhcyB2YWx1ZXMgYW5kIHRoZSBleGNlcHRpb25TdGFjayBkb2Vzbid0LgotICAgIEpTT2Jq
ZWN0KiBleGNlcHRpb25PYmplY3QgPSBleGNlcHRpb24udG9PYmplY3QoZXhlYyk7Ci0gICAgaWYg
KGV4Y2VwdGlvbi5pc09iamVjdCgpKSB7CisgICAgaWYgKGV4Y2VwdGlvbi0+dmFsdWUoKS5pc09i
amVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3QgPSBleGNlcHRpb24t
PnZhbHVlKCkudG9PYmplY3QoZXhlYyk7CiAgICAgICAgIGludCBsaW5lTnVtYmVyOwogICAgICAg
ICBpbnQgY29sdW1uTnVtYmVyOwogICAgICAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJMOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0
b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3Jp
cHRDYWxsU3RhY2tGYWN0b3J5LmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNl
IEpTQyB7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBKU1ZhbHVl
OwogfQpAQCAtNDcsNyArNDgsNyBAQCBjbGFzcyBTY3JpcHRDYWxsU3RhY2s7CiAvLyBGSVhNRTog
VGhlIHN1YnRsZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZXNlIHNob3VsZCBiZSBlbGltaW5hdGVk
LgogSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNj
cmlwdENhbGxTdGFjayhKU0M6OkV4ZWNTdGF0ZSosIHNpemVfdCBtYXhTdGFja1NpemUpOwogSlNf
RVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdENh
bGxTdGFja0ZvckNvbnNvbGUoSlNDOjpFeGVjU3RhdGUqLCBzaXplX3QgbWF4U3RhY2tTaXplKTsK
LUpTX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3Jp
cHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlJiBl
eGNlcHRpb24sIHNpemVfdCBtYXhTdGFja1NpemUpOworSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1Jl
ZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiosIHNpemVfdCBtYXhTdGFja1NpemUpOwog
SlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGNyZWF0ZVNjcmlw
dEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KTsK
IAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkRlYnVn
Z2VyQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJTY29wZS5oIgorI2luY2x1ZGUgIkV4
Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTSmF2YVNjcmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IkpTTG9jay5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKQEAgLTkzLDcgKzk0
LDcgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3BvaQogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBTY3JpcHRCcmVha3BvaW50QWN0aW9uVHlwZUV2YWx1YXRl
OiB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgICAgICBFeGNlcHRpb24qIGV4Y2Vw
dGlvbjsKICAgICAgICAgZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKGJyZWFrcG9pbnRBY3Rp
b24uZGF0YSwgZXhjZXB0aW9uKTsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAg
IHJlcG9ydEV4Y2VwdGlvbihkZWJ1Z2dlckNhbGxGcmFtZS0+ZXhlYygpLCBleGNlcHRpb24pOwpA
QCAtMTAzLDEzICsxMDQsMTMgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVh
a3BvaQogICAgICAgICBkaXNwYXRjaEJyZWFrcG9pbnRBY3Rpb25Tb3VuZChkZWJ1Z2dlckNhbGxG
cmFtZS0+ZXhlYygpLCBicmVha3BvaW50QWN0aW9uLmlkZW50aWZpZXIpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlUHJvYmU6IHsKLSAgICAgICAg
SlNWYWx1ZSBleGNlcHRpb247CisgICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uOwogICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGRlYnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0ZShicmVha3BvaW50
QWN0aW9uLmRhdGEsIGV4Y2VwdGlvbik7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAg
ICAgICByZXBvcnRFeGNlcHRpb24oZGVidWdnZXJDYWxsRnJhbWUtPmV4ZWMoKSwgZXhjZXB0aW9u
KTsKICAgICAgICAgCiAgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSA9IGRlYnVnZ2VyQ2Fs
bEZyYW1lLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB3cmFwcGVkUmVzdWx0ID0gRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUoc3RhdGUtPnZtKCksIGV4Y2VwdGlvbiA/IGV4Y2VwdGlvbiA6IHJlc3VsdCk7CisgICAg
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHdyYXBwZWRSZXN1bHQgPSBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZShzdGF0ZS0+dm0oKSwgZXhjZXB0aW9uID8gZXhjZXB0aW9uLT52YWx1ZSgpIDog
cmVzdWx0KTsKICAgICAgICAgZGlzcGF0Y2hCcmVha3BvaW50QWN0aW9uUHJvYmUoc3RhdGUsIGJy
ZWFrcG9pbnRBY3Rpb24sIHdyYXBwZWRSZXN1bHQpOwogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0zMDIsNyArMzAzLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlQnJlYWtwb2lu
dAogICAgIH0KIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlRXhjZXB0aW9uSW5C
cmVha3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZXhj
ZXB0aW9uKSBjb25zdAordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlRXhjZXB0aW9uSW5C
cmVha3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkV4Y2VwdGlvbiog
ZXhjZXB0aW9uKSBjb25zdAogewogICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24p
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1Nl
cnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2Ny
aXB0RGVidWdTZXJ2ZXIuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoSlNDOjpK
U0dsb2JhbE9iamVjdCopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcnVuRXZlbnRMb29wV2hpbGVQ
YXVzZWQoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudFNjcmlwdChKU0M6OkV4ZWNT
dGF0ZSopIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJl
cG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKikgY29uc3QgPSAw
OwogCiAgICAgYm9vbCBldmFsdWF0ZUJyZWFrcG9pbnRBY3Rpb24oY29uc3QgU2NyaXB0QnJlYWtw
b2ludEFjdGlvbiYpOwogCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgc291cmNlUGFyc2VkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpTb3VyY2VQcm92aWRlcios
IGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNc2cpIG92ZXJyaWRlIGZpbmFsOwog
ICAgIHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhKU0M6OkpTR2xvYmFsT2JqZWN0Kikg
b3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVC
cmVha3BvaW50SGl0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OkJyZWFrcG9pbnQm
KSBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXhjZXB0aW9uSW5CcmVh
a3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbikg
Y29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV4Y2VwdGlvbklu
QnJlYWtwb2ludENvbmRpdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKikgY29u
c3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBhdXNlKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkRlYnVnZ2VyOjpSZWFzb25Gb3JQYXVzZSkgb3ZlcnJpZGUgZmlu
YWw7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMo
KSBvdmVycmlkZSBmaW5hbDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSAr
MjQsMTEgQEAKICNkZWZpbmUgQ2FsbEZyYW1lX2gKIAogI2luY2x1ZGUgIkFic3RyYWN0UEMuaCIK
LSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUgIlN0YWNr
VmlzaXRvci5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgog
CiBuYW1lc3BhY2UgSlNDICB7CkBAIC03NSwxMyArNzUsOSBAQCBuYW1lc3BhY2UgSlNDICB7CiAg
ICAgICAgIC8vIEJ1dCB0aGV5J3JlIHVzZWQgaW4gbWFueSBwbGFjZXMgaW4gbGVnYWN5IGNvZGUs
IHNvIHRoZXkncmUgbm90IGdvaW5nIGF3YXkgYW55IHRpbWUgc29vbi4KIAogICAgICAgICB2b2lk
IGNsZWFyRXhjZXB0aW9uKCkgeyB2bSgpLmNsZWFyRXhjZXB0aW9uKCk7IH0KLSAgICAgICAgdm9p
ZCBjbGVhclN1cHBsZW1lbnRhcnlFeGNlcHRpb25JbmZvKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgdm0oKS5jbGVhckV4Y2VwdGlvblN0YWNrKCk7Ci0gICAgICAgIH0KIAotICAgICAgICBKU1Zh
bHVlIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIHZtKCkuZXhjZXB0aW9uKCk7IH0KLSAgICAg
ICAgYm9vbCBoYWRFeGNlcHRpb24oKSBjb25zdCB7IHJldHVybiAhdm0oKS5leGNlcHRpb24oKS5p
c0VtcHR5KCk7IH0KKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKSBjb25zdCB7IHJldHVy
biB2bSgpLmV4Y2VwdGlvbigpOyB9CisgICAgICAgIGJvb2wgaGFkRXhjZXB0aW9uKCkgY29uc3Qg
eyByZXR1cm4gISF2bSgpLmV4Y2VwdGlvbigpOyB9CiAKICAgICAgICAgQXRvbWljU3RyaW5nVGFi
bGUqIGF0b21pY1N0cmluZ1RhYmxlKCkgY29uc3QgeyByZXR1cm4gdm0oKS5hdG9taWNTdHJpbmdU
YWJsZSgpOyB9CiAgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVz
KCkgY29uc3QgeyByZXR1cm4gKnZtKCkucHJvcGVydHlOYW1lczsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lv
biAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiRGVidWdn
ZXJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJFcnJvckluc3RhbmNlLmgiCiAjaW5jbHVkZSAiRXZh
bENvZGVDYWNoZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJKU0FycmF5
LmgiCkBAIC00MzUsNyArNDM2LDcgQEAgc3RhdGljIGJvb2wgdW53aW5kQ2FsbEZyYW1lKFN0YWNr
VmlzaXRvcgogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gdmlzaXRvci0+Y2FsbEZyYW1l
KCk7CiAgICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2Jh
bE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7Ci0gICAgICAgIENsZWFyRXhjZXB0aW9uU2NvcGUgc2Nv
cGUoJmNhbGxGcmFtZS0+dm0oKSk7CisgICAgICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZSBzY29w
ZSgmY2FsbEZyYW1lLT52bSgpKTsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkpKQogICAgICAgICAgICAgZGVidWdnZXItPnJldHVybkV2
ZW50KGNhbGxGcmFtZSk7CiAgICAgICAgIGVsc2UKQEAgLTU4Myw5ICs1ODQsOSBAQCBKU1N0cmlu
ZyogSW50ZXJwcmV0ZXI6OnN0YWNrVHJhY2VBc1N0cmluCiAgICAgcmV0dXJuIGpzU3RyaW5nKCZl
eGVjLT52bSgpLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCi1jbGFzcyBHZXRFeGNlcHRpb25I
YW5kbGVyRnVuY3RvciB7CitjbGFzcyBHZXRDYXRjaEhhbmRsZXJGdW5jdG9yIHsKIHB1YmxpYzoK
LSAgICBHZXRFeGNlcHRpb25IYW5kbGVyRnVuY3RvcigpCisgICAgR2V0Q2F0Y2hIYW5kbGVyRnVu
Y3RvcigpCiAgICAgICAgIDogbV9oYW5kbGVyKDApCiAgICAgewogICAgIH0KQEAgLTU5OSw3ICs2
MDAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51
ZTsKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHZpc2l0b3ItPmJ5dGVjb2Rl
T2Zmc2V0KCk7Ci0gICAgICAgIG1faGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgY29uc3QgYm9vbCBSZXF1aXJlQ2F0
Y2hIYW5kbGVyID0gdHJ1ZTsKKyAgICAgICAgbV9oYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVy
Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVDYXRjaEhhbmRsZXIpOwog
ICAgICAgICBpZiAobV9oYW5kbGVyKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6
RG9uZTsKIApAQCAtNjQ5LDExICs2NTEsMTIgQEAgcHJpdmF0ZToKICAgICBIYW5kbGVySW5mbyom
IG1faGFuZGxlcjsKIH07CiAKLU5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6
OnVud2luZChWTUVudHJ5RnJhbWUqJiB2bUVudHJ5RnJhbWUsIENhbGxGcmFtZSomIGNhbGxGcmFt
ZSwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUpCitORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIElu
dGVycHJldGVyOjp1bndpbmQoVk1FbnRyeUZyYW1lKiYgdm1FbnRyeUZyYW1lLCBDYWxsRnJhbWUq
JiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBib29sIGlzVGVybWluYXRpb24g
PSBmYWxzZTsKIAorICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGNlcHRpb24tPnZhbHVl
KCk7CiAgICAgQVNTRVJUKCFleGNlcHRpb25WYWx1ZS5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCgh
ZXhjZXB0aW9uVmFsdWUuaXNDZWxsKCkgfHwgZXhjZXB0aW9uVmFsdWUuYXNDZWxsKCkpOwogICAg
IC8vIFRoaXMgc2hvdWxkbid0IGJlIHBvc3NpYmxlIChoZW5jZSB0aGUgYXNzZXJ0aW9ucyksIGJ1
dCB3ZSdyZSBhbHJlYWR5IGluIHRoZSBzbG93ZXN0IG9mCkBAIC02NjIsMzIgKzY2NSwzNSBAQCBO
RVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1CiAgICAgICAgIGV4Y2VwdGlv
blZhbHVlID0ganNOdWxsKCk7CiAKICAgICBpZiAoZXhjZXB0aW9uVmFsdWUuaXNPYmplY3QoKSkK
LSAgICAgICAgaXNUZXJtaW5hdGlvbiA9IGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihh
c09iamVjdChleGNlcHRpb25WYWx1ZSkpOworICAgICAgICBpc1Rlcm1pbmF0aW9uID0gaXNUZXJt
aW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbik7CiAKLSAgICBBU1NFUlQoY2FsbEZy
YW1lLT52bSgpLmV4Y2VwdGlvblN0YWNrKCkuc2l6ZSgpKTsKKyAgICBBU1NFUlQoY2FsbEZyYW1l
LT52bSgpLmV4Y2VwdGlvbigpICYmIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKS0+c3RhY2so
KS5zaXplKCkpOwogCiAgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVudHJ5
R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7Ci0gICAgaWYgKGRlYnVnZ2VyICYmIGRlYnVnZ2Vy
LT5uZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcygpKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gY2xl
YXIgdGhlIGV4Y2VwdGlvbiBhbmQgdGhlIGV4Y2VwdGlvbiBzdGFjayBoZXJlIGluIG9yZGVyIHRv
IHNlZSBpZiBhIG5ldyBleGNlcHRpb24gaGFwcGVucy4KKyAgICBpZiAoZGVidWdnZXIgJiYgZGVi
dWdnZXItPm5lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKCkgJiYgIWV4Y2VwdGlvbi0+ZGlkTm90aWZ5
SW5zcGVjdG9yT2ZUaHJvdygpKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgdGhlIGV4
Y2VwdGlvbiBoZXJlIGluIG9yZGVyIHRvIHNlZSBpZiBhIG5ldyBleGNlcHRpb24gaGFwcGVucy4K
ICAgICAgICAgLy8gQWZ0ZXJ3YXJkcywgdGhlIHZhbHVlcyBhcmUgcHV0IGJhY2sgdG8gY29udGlu
dWUgcHJvY2Vzc2luZyB0aGlzIGVycm9yLgotICAgICAgICBDbGVhckV4Y2VwdGlvblNjb3BlIHNj
b3BlKCZjYWxsRnJhbWUtPnZtKCkpOworICAgICAgICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgc2Nv
cGUoJmNhbGxGcmFtZS0+dm0oKSk7CiAgICAgICAgIC8vIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQg
aWYgdGhlIGRlYnVnZ2VyIGlzIGVuYWJsZWQgdGhlbiB0aGVyZSBpcyBubyBpbmxpbmluZy4KICAg
ICAgICAgLy8gSWYgdGhhdCBhc3N1bXB0aW9uIHR1cm5zIG91dCB0byBiZSBmYWxzZSB0aGVuIHdl
J2xsIGlnbm9yZSB0aGUgaW5saW5lZCBjYWxsCiAgICAgICAgIC8vIGZyYW1lcy4KICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTc1NAogCi0gICAg
ICAgIGJvb2wgaGFzSGFuZGxlcjsKKyAgICAgICAgYm9vbCBoYXNDYXRjaEhhbmRsZXI7CiAgICAg
ICAgIGlmIChpc1Rlcm1pbmF0aW9uKQotICAgICAgICAgICAgaGFzSGFuZGxlciA9IGZhbHNlOwor
ICAgICAgICAgICAgaGFzQ2F0Y2hIYW5kbGVyID0gZmFsc2U7CiAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgR2V0RXhjZXB0aW9uSGFuZGxlckZ1bmN0b3IgZnVuY3RvcjsKKyAgICAgICAgICAg
IEdldENhdGNoSGFuZGxlckZ1bmN0b3IgZnVuY3RvcjsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+
aXRlcmF0ZShmdW5jdG9yKTsKLSAgICAgICAgICAgIGhhc0hhbmRsZXIgPSAhIWZ1bmN0b3IuaGFu
ZGxlcigpOworICAgICAgICAgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSBmdW5jdG9yLmhhbmRs
ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCghaGFuZGxlciB8fCBoYW5kbGVyLT5pc0NhdGNoSGFu
ZGxlcigpKTsKKyAgICAgICAgICAgIGhhc0NhdGNoSGFuZGxlciA9ICEhaGFuZGxlcjsKICAgICAg
ICAgfQogCi0gICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25W
YWx1ZSwgaGFzSGFuZGxlcik7CisgICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oY2FsbEZyYW1l
LCBleGNlcHRpb25WYWx1ZSwgaGFzQ2F0Y2hIYW5kbGVyKTsKICAgICAgICAgQVNTRVJUKCFjYWxs
RnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKICAgICB9CisgICAgZXhjZXB0aW9uLT5zZXREaWROb3Rp
ZnlJbnNwZWN0b3JPZlRocm93KCk7CiAKICAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhh
bmRsZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgogICAgIEhhbmRs
ZXJJbmZvKiBoYW5kbGVyID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
OTgsMjAgKzk4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGV4cHJlc3Npb25J
bmZvKGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25l
ZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbik7CiAgICAgfTsKIAotICAgIGNsYXNzIENsZWFyRXhj
ZXB0aW9uU2NvcGUgeworICAgIGNsYXNzIFN1c3BlbmRFeGNlcHRpb25TY29wZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBDbGVhckV4Y2VwdGlvblNjb3BlKFZNKiB2bSk6IG1fdm0odm0pCisgICAg
ICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZShWTSogdm0pCisgICAgICAgICAgICA6IG1fdm0odm0p
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHZtLT5nZXRFeGNlcHRpb25JbmZvKG9sZEV4Y2VwdGlv
biwgb2xkRXhjZXB0aW9uU3RhY2spOworICAgICAgICAgICAgb2xkRXhjZXB0aW9uID0gdm0tPmV4
Y2VwdGlvbigpOwogICAgICAgICAgICAgdm0tPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIH0K
LSAgICAgICAgfkNsZWFyRXhjZXB0aW9uU2NvcGUoKQorICAgICAgICB+U3VzcGVuZEV4Y2VwdGlv
blNjb3BlKCkKICAgICAgICAgewotICAgICAgICAgICAgbV92bS0+c2V0RXhjZXB0aW9uSW5mbyhv
bGRFeGNlcHRpb24sIG9sZEV4Y2VwdGlvblN0YWNrKTsKKyAgICAgICAgICAgIG1fdm0tPnNldEV4
Y2VwdGlvbihvbGRFeGNlcHRpb24pOwogICAgICAgICB9CiAgICAgcHJpdmF0ZToKLSAgICAgICAg
SlNDOjpKU1ZhbHVlIG9sZEV4Y2VwdGlvbjsKLSAgICAgICAgUmVmQ291bnRlZEFycmF5PEpTQzo6
U3RhY2tGcmFtZT4gb2xkRXhjZXB0aW9uU3RhY2s7CisgICAgICAgIEV4Y2VwdGlvbiogb2xkRXhj
ZXB0aW9uOwogICAgICAgICBWTSogbV92bTsKICAgICB9OwogICAgIApAQCAtMjE1LDcgKzIxNSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgU2FtcGxpbmdUb29sKiBzYW1w
bGVyKCkgeyByZXR1cm4gbV9zYW1wbGVyLmdldCgpOyB9CiAKLSAgICAgICAgTkVWRVJfSU5MSU5F
IEhhbmRsZXJJbmZvKiB1bndpbmQoVk1FbnRyeUZyYW1lKiYsIENhbGxGcmFtZSomLCBKU1ZhbHVl
Jik7CisgICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdW53aW5kKFZNRW50cnlGcmFt
ZSomLCBDYWxsRnJhbWUqJiwgRXhjZXB0aW9uKik7CiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lk
IGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9va0lEKTsKICAgICAgICAgSlNTdHJpbmcqIHN0YWNr
VHJhY2VBc1N0cmluZyhFeGVjU3RhdGUqLCBWZWN0b3I8U3RhY2tGcmFtZT4pOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lv
biAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw3ICsyMjMsNyBAQCBBc3NlbWJseUhlbHBlcnM6Okp1
bXAgQXNzZW1ibHlIZWxwZXJzOjplCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICByZXN1bHQgPSBi
cmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJv
LCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKICNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgcmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNl
cHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJl
dF9jYXN0PGNoYXIqPih2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZh
bHVlVGFnKSk7CisgICAgcmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25D
aGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZF
eGNlcHRpb24oKSksIFRydXN0ZWRJbW0zMigwKSk7CiAjZW5kaWYKICAgICAKICAgICBpZiAod2lk
dGggPT0gTm9ybWFsSnVtcFdpZHRoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNiArNDAs
MTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4
ZWNTdGF0ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlKQordm9pZCBnZW5lcmlj
VW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUpCiB7CiAgICAgaWYgKE9wdGlvbnM6
OmJyZWFrT25UaHJvdygpKSB7CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3
UG9pbnRlcihjYWxsRnJhbWUpLCAiIGZvciBjb2RlIGJsb2NrICIsICpjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLCAiXG4iKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAgICAgCi0gICAgUkVMRUFT
RV9BU1NFUlQoZXhjZXB0aW9uVmFsdWUpOworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gdm0t
PmV4Y2VwdGlvbigpOworICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2VwdGlvbik7CiAgICAgVk1FbnRy
eUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwotICAgIEhhbmRsZXJJ
bmZvKiBoYW5kbGVyID0gdm0tPmludGVycHJldGVyLT51bndpbmQodm1FbnRyeUZyYW1lLCBjYWxs
RnJhbWUsIGV4Y2VwdGlvblZhbHVlKTsgLy8gVGhpcyBtYXkgdXBkYXRlIHZtRW50cnlGcmFtZSBh
bmQgY2FsbEZyYW1lLgorICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gdm0tPmludGVycHJldGVy
LT51bndpbmQodm1FbnRyeUZyYW1lLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7IC8vIFRoaXMgbWF5
IHVwZGF0ZSB2bUVudHJ5RnJhbWUgYW5kIGNhbGxGcmFtZS4KIAogICAgIHZvaWQqIGNhdGNoUm91
dGluZTsKICAgICBJbnN0cnVjdGlvbiogY2F0Y2hQQ0ZvckludGVycHJldGVyID0gMDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCShyZXZpc2lvbiAxODUx
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEV4ZWNTdGF0
ZTsKIGNsYXNzIFZNOwogCi12b2lkIGdlbmVyaWNVbndpbmQoVk0qLCBFeGVjU3RhdGUqLCBKU1Zh
bHVlIGV4Y2VwdGlvblZhbHVlKTsKK3ZvaWQgZ2VuZXJpY1Vud2luZChWTSosIEV4ZWNTdGF0ZSop
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJEZWJ1
Z2dlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIK
ICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCkBAIC05Nyw3ICs5OCw3
IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYKICNlbmRpZiAvLyBD
UFUoWDg2KQogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGV4Y2VwdGlvbgotICAgIEp1bXAgc2F3RXhj
ZXB0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9j
YXN0PGNoYXIqPih2bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpOyAKKyAgICBKdW1wIHNhd0V4Y2VwdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3Modm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwgVHJ1c3RlZEltbTMyKDApKTsKIAog
ICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgLy8gUmV0dXJuLgpAQCAtODI5LDEzICs4
MzAsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogCiAgICAgLy8gTm93IHN0b3JlIHRoZSBleGNlcHRpb24gcmV0dXJuZWQgYnkgb3BlcmF0aW9u
VGhyb3cuCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKLSAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7Ci0gICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoSlNWYWx1ZSgpLnBheWxvYWQoKSksIEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRp
b25PZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkp
OwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWUoKS50YWcoKSksIEFkZHJlc3MocmVn
VDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZz
ZXQoKSksIHJlZ1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwg
cmVnVDEpOworCisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDMsIFZN
OjpleGNlcHRpb25PZmZzZXQoKSkpOwogCiAgICAgdW5zaWduZWQgZXhjZXB0aW9uID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBlbWl0U3RvcmUoZXhjZXB0aW9uLCByZWdU
MSwgcmVnVDApOworICAgIGVtaXRTdG9yZShleGNlcHRpb24sIHJlZ1QxLCByZWdUMik7CisKKyAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgRXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOworICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QyLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKKworICAgIHVuc2lnbmVkIHRocm93
blZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBlbWl0U3RvcmUo
dGhyb3duVmFsdWUsIHJlZ1QxLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgIkJhc2ljQmxvY2tMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkNv
cGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNp
bmNsdWRlICJKU0FycmF5LmgiCkBAIC01MjksNiArNTMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhj
ZXB0aW9uT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0
KCkpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOworCisgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIEV4Y2VwdGlvbjo6dmFsdWVP
ZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1t
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4MjMsNyArMTgyMyw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvdyhFeGVj
U3QKICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwogCiAgICAg
Ly8gUmVzdWx0cyBzdG9yZWQgb3V0LW9mLWJhbmQgaW4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhy
b3csIHZtLmNhbGxGcmFtZUZvclRocm93ICYgdm0udm1FbnRyeUZyYW1lRm9yVGhyb3cKLSAgICBn
ZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSk7CisgICAgZ2VuZXJpY1Vud2lu
ZCh2bSwgZXhlYyk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25GbHVzaFdyaXRl
QmFycmllckJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKQEAgLTE4NjIsMTEg
KzE4NjIsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5pdEdsb2JhbENvCiB2b2lk
IEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihWTSogdm0sIEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQot
ICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSB2bS0+ZXhjZXB0aW9uKCk7Ci0gICAgQVNTRVJU
KGV4Y2VwdGlvblZhbHVlKTsKLSAgICAKLSAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNl
cHRpb25WYWx1ZSk7CisgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CiAgICAgQVNTRVJUKHZt
LT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKQEAgLTE4NzcsMTEgKzE4NzMsNyBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlCiAgICAgQVNTRVJUKGNhbGxl
ckZyYW1lKTsKIAogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2
bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7Ci0KLSAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gdm0tPmV4Y2VwdGlvbigpOwotICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7Ci0gICAg
Ci0gICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbGVyRnJhbWUsIGV4Y2VwdGlvblZhbHVlKTsKKyAg
ICBnZW5lcmljVW53aW5kKHZtLCBjYWxsZXJGcmFtZSk7CiAgICAgQVNTRVJUKHZtLT50YXJnZXRN
YWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKQEAgLTE4ODksOCArMTg4MSw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WTUhhbmRsZUV4Y2UKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgIGdl
bmVyaWNVbndpbmQodm0sIGV4ZWMsIHZtLT5leGNlcHRpb24oKSk7CisgICAgZ2VuZXJpY1Vud2lu
ZCh2bSwgZXhlYyk7CiB9CiAKIC8vIFRoaXMgZnVuY3Rpb24gInNob3VsZCIganVzdCB0YWtlIHRo
ZSBFeGVjU3RhdGUqLCBidXQgZG9pbmcgc28gd291bGQgbWFrZSBpdCBtb3JlIGRpZmZpY3VsdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAko
cmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksOCArMzQ5LDggQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogI2Vsc2UKICAgICBKU0ludGVyZmFjZUpJVDo6
SnVtcCBleGNlcHRpb25IYW5kbGVyID0gaml0LmJyYW5jaDMyKAogICAgICAgICBKU0ludGVyZmFj
ZUpJVDo6Tm90RXF1YWwsCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpBYnNvbHV0ZUFkZHJlc3Mo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksCi0gICAgICAg
IEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwor
ICAgICAgICBKU0ludGVyZmFjZUpJVDo6QWJzb2x1dGVBZGRyZXNzKHZtLT5hZGRyZXNzT2ZFeGNl
cHRpb24oKSksCisgICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoMCkpOwogI2Vu
ZGlmCiAKICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCShy
ZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZz
ZXRzRXh0cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1
ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAi
RGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXhl
Y3V0YWJsZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc1LDggKzEzNzUsNyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV9kCiBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfaGFuZGxlX2V4Y2VwdGlvbikKIHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMo
KTsKLSAgICBBU1NFUlQodm0uZXhjZXB0aW9uKCkpOwotICAgIGdlbmVyaWNVbndpbmQoJnZtLCBl
eGVjLCB2bS5leGNlcHRpb24oKSk7CisgICAgZ2VuZXJpY1Vud2luZCgmdm0sIGV4ZWMpOwogICAg
IExMSU5UX0VORF9JTVBMKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAx
ODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNjkzLDcgKzY5Myw3IEBAIG1hY3JvIGJyYW5j
aElmRXhjZXB0aW9uKGxhYmVsKQogICAgIGxvYWRwIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2Zy
XSwgdDMKICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKICAgICBsb2FkcCBNYXJrZWRCbG9j
azo6bV93ZWFrU2V0ICsgV2Vha1NldDo6bV92bVt0M10sIHQzCi0gICAgYmllcSBWTTo6bV9leGNl
cHRpb24gKyBUYWdPZmZzZXRbdDNdLCBFbXB0eVZhbHVlVGFnLCAubm9FeGNlcHRpb24KKyAgICBi
dGl6IFZNOjptX2V4Y2VwdGlvblt0M10sIC5ub0V4Y2VwdGlvbgogICAgIGptcCBsYWJlbAogLm5v
RXhjZXB0aW9uOgogZW5kCkBAIC0xOTUyLDE1ICsxOTUyLDIwIEBAIF9sbGludF9vcF9jYXRjaDoK
ICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKIAogICAgIGxvYWRpIFZNOjp0YXJn
ZXRJbnRlcnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQwotICAgIGxvYWRpIFZNOjptX2V4Y2VwdGlv
biArIFBheWxvYWRPZmZzZXRbdDNdLCB0MAotICAgIGxvYWRpIFZNOjptX2V4Y2VwdGlvbiArIFRh
Z09mZnNldFt0M10sIHQxCi0gICAgc3RvcmVpIDAsIFZNOjptX2V4Y2VwdGlvbiArIFBheWxvYWRP
ZmZzZXRbdDNdCi0gICAgc3RvcmVpIEVtcHR5VmFsdWVUYWcsIFZNOjptX2V4Y2VwdGlvbiArIFRh
Z09mZnNldFt0M10KKyAgICBsb2FkaSBWTTo6bV9leGNlcHRpb25bdDNdLCB0MAorICAgIHN0b3Jl
aSAwLCBWTTo6bV9leGNlcHRpb25bdDNdCiAgICAgbG9hZGkgNFtQQ10sIHQyCiAgICAgc3RvcmVp
IHQwLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDIsIDhdCisgICAgc3RvcmVpIENlbGxUYWcsIFRhZ09m
ZnNldFtjZnIsIHQyLCA4XQorCisgICAgbG9hZGkgRXhjZXB0aW9uOjptX3ZhbHVlICsgVGFnT2Zm
c2V0W3QwXSwgdDEKKyAgICBsb2FkaSBFeGNlcHRpb246Om1fdmFsdWUgKyBQYXlsb2FkT2Zmc2V0
W3QwXSwgdDAKKyAgICBsb2FkaSA4W1BDXSwgdDIKKyAgICBzdG9yZWkgdDAsIFBheWxvYWRPZmZz
ZXRbY2ZyLCB0MiwgOF0KICAgICBzdG9yZWkgdDEsIFRhZ09mZnNldFtjZnIsIHQyLCA4XQorCiAg
ICAgdHJhY2VFeGVjdXRpb24oKSAgIyBUaGlzIG5lZWRzIHRvIGJlIGhlcmUgYmVjYXVzZSB3ZSBk
b24ndCB3YW50IHRvIGNsb2JiZXIgdDAsIHQxLCB0MiwgdDMgYWJvdmUuCi0gICAgZGlzcGF0Y2go
MikKKyAgICBkaXNwYXRjaCgzKQogCiBfbGxpbnRfb3BfZW5kOgogICAgIHRyYWNlRXhlY3V0aW9u
KCkKQEAgLTIwMzgsNyArMjA0Myw3IEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1
dGFibGVPZmYKICAgICBlbmQKICAgICAKICAgICBmdW5jdGlvbkVwaWxvZ3VlKCkKLSAgICBiaW5l
cSBWTTo6bV9leGNlcHRpb24gKyBUYWdPZmZzZXRbdDNdLCBFbXB0eVZhbHVlVGFnLCAuaGFuZGxl
RXhjZXB0aW9uCisgICAgYnRpbnogVk06Om1fZXhjZXB0aW9uW3QzXSwgLmhhbmRsZUV4Y2VwdGlv
bgogICAgIHJldAogCiAuaGFuZGxlRXhjZXB0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9u
IDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xODIwLDEyICsxODIwLDE4IEBAIF9sbGludF9v
cF9jYXRjaDoKICAgICBsb2FkcCBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93W3QzXSwg
UEMKICAgICBzdWJwIFBCLCBQQwogICAgIHJzaGlmdHAgMywgUEMKKwogICAgIGxvYWRxIFZNOjpt
X2V4Y2VwdGlvblt0M10sIHQwCiAgICAgc3RvcmVxIDAsIFZNOjptX2V4Y2VwdGlvblt0M10KICAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDIpCiAgICAgc3RvcmVxIHQwLCBbY2ZyLCB0Miwg
OF0KKworICAgIGxvYWRxIEV4Y2VwdGlvbjo6bV92YWx1ZVt0MF0sIHQzCisgICAgbG9hZGlzRnJv
bUluc3RydWN0aW9uKDIsIHQyKQorICAgIHN0b3JlcSB0MywgW2NmciwgdDIsIDhdCisKICAgICB0
cmFjZUV4ZWN1dGlvbigpCi0gICAgZGlzcGF0Y2goMikKKyAgICBkaXNwYXRjaCgzKQogCiAKIF9s
bGludF9vcF9lbmQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25z
dHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxMSwxMCAr
ODExLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgVHJ5
Tm9kZTo6VHJ5Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBTdGF0ZW1lbnRO
b2RlKiB0cnlCbG9jaywgY29uc3QgSWRlbnRpZmllciYgZXhjZXB0aW9uSWRlbnQsIFN0YXRlbWVu
dE5vZGUqIGNhdGNoQmxvY2ssIFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jaykKKyAgICBpbmxp
bmUgVHJ5Tm9kZTo6VHJ5Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBTdGF0
ZW1lbnROb2RlKiB0cnlCbG9jaywgY29uc3QgSWRlbnRpZmllciYgdGhyb3duVmFsdWVJZGVudCwg
U3RhdGVtZW50Tm9kZSogY2F0Y2hCbG9jaywgU3RhdGVtZW50Tm9kZSogZmluYWxseUJsb2NrKQog
ICAgICAgICA6IFN0YXRlbWVudE5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV90cnlCbG9jayh0
cnlCbG9jaykKLSAgICAgICAgLCBtX2V4Y2VwdGlvbklkZW50KGV4Y2VwdGlvbklkZW50KQorICAg
ICAgICAsIG1fdGhyb3duVmFsdWVJZGVudCh0aHJvd25WYWx1ZUlkZW50KQogICAgICAgICAsIG1f
Y2F0Y2hCbG9jayhjYXRjaEJsb2NrKQogICAgICAgICAsIG1fZmluYWxseUJsb2NrKGZpbmFsbHlC
bG9jaykKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZp
c2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE1MTEsNyArMTUxMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKSBvdmVycmlkZTsKIAogICAgICAgICBTdGF0ZW1lbnROb2RlKiBtX3RyeUJsb2NrOwot
ICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBtX2V4Y2VwdGlvbklkZW50OworICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBtX3Rocm93blZhbHVlSWRlbnQ7CiAgICAgICAgIFN0YXRlbWVudE5vZGUq
IG1fY2F0Y2hCbG9jazsKICAgICAgICAgU3RhdGVtZW50Tm9kZSogbV9maW5hbGx5QmxvY2s7CiAg
ICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAJ
KHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkNhbGxEYXRhLmgiCiAKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0Z1bmN0aW9uLmgiCkBAIC0zOSwxNSArNDAsMTUgQEAgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBmdQogICAgIHJldHVybiBleGVjLT5pbnRlcnByZXRlcigpLT5leGVj
dXRlQ2FsbChleGVjLCBhc09iamVjdChmdW5jdGlvbk9iamVjdCksIGNhbGxUeXBlLCBjYWxsRGF0
YSwgdGhpc1ZhbHVlLCBhcmdzKTsKIH0KIAotSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRh
JiBjYWxsRGF0YSwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIEpTVmFs
dWUqIGV4Y2VwdGlvbikKK0pTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVu
Y3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBFeGNlcHRpb24qJiByZXR1
cm5lZEV4Y2VwdGlvbikKIHsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rp
b25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAg
ICAgICpleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuZWRFeGNl
cHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQorICAgIH0gZWxzZQorICAg
ICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IG51bGxwdHI7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FsbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWxsRGF0YS5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWxsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQXJnTGlzdDsKK2NsYXNzIEV4Y2VwdGlvbjsKIGNs
YXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKIGNsYXNzIEpTT2JqZWN0
OwpAQCAtNTgsNyArNTksNyBAQCB1bmlvbiBDYWxsRGF0YSB7CiB9OwogCiBKU19FWFBPUlRfUFJJ
VkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2Fs
bFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KTsKLUpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqLCBKU1ZhbHVlIGZ1
bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUqIGV4Y2VwdGlvbik7CitKU19FWFBPUlRfUFJJVkFU
RSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5
cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmLCBF
eGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJDYWxsRnJh
bWUuaCIKICNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCkBAIC02MCwxOSArNjEs
MTggQEAgYm9vbCBjaGVja1N5bnRheChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZAogICAgICAgICBK
U1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdCwgSlNQYXJzZXJDb2RlVHlwZTo6UHJvZ3JhbSwg
ZXJyb3IpOwogfQogCi1KU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSogcmV0dXJuZWRFeGNl
cHRpb24pCitKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgRXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRp
b24pCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
ZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNT
dHJpbmdUYWJsZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+dm0oKS5pc0NvbGxlY3Rv
ckJ1c3koKSk7CisgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBudWxscHRyOwogCiAgICAgQ29kZVBy
b2ZpbGluZyBwcm9maWxlKHNvdXJjZSk7CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3Jh
bSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsKICAgICBpZiAoIXBy
b2dyYW0pIHsKLSAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAgICAgICAgKnJl
dHVybmVkRXhjZXB0aW9uID0gZXhlYy0+dm0oKS5leGNlcHRpb24oKTsKLQorICAgICAgICByZXR1
cm5lZEV4Y2VwdGlvbiA9IGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCk7CiAgICAgICAgIGV4ZWMtPnZt
KCkuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQpAQCAtODMsOSArODMsNyBAQCBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKHBy
b2dyYW0sIGV4ZWMsIHRoaXNPYmopOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikKLSAgICAgICAgICAgICpyZXR1cm5lZEV4
Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotCisgICAgICAgIHJldHVybmVkRXhjZXB0aW9u
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsOCBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7
Ci0gICAgCisKK2NsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTU2Nv
cGU7CiBjbGFzcyBQYXJzZXJFcnJvcjsKQEAgLTM1LDcgKzM2LDEyIEBAIGNsYXNzIFZNOwogCiBK
U19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNrU3ludGF4KFZNJiwgY29uc3QgU291cmNlQ29kZSYs
IFBhcnNlckVycm9yJik7CiBKU19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNrU3ludGF4KEV4ZWNT
dGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKLUpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29k
ZSYsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZSgpLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAw
KTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgY29uc3Qg
U291cmNlQ29kZSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2Vw
dGlvbik7CitpbmxpbmUgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZUNvZGUsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZSgpKQorewor
ICAgIEV4Y2VwdGlvbiogdW51c2VkOworICAgIHJldHVybiBldmFsdWF0ZShleGVjLCBzb3VyY2VD
b2RlLCB0aGlzVmFsdWUsIHVudXNlZCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgJKHJldmlzaW9uIDE4NTExMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc2LDYgKzc2LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93VHlwZUVycgog
SlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93U3ludGF4RXJyb3IoRXhlY1N0YXRlKik7
CiAKIC8vIENvbnZlbmllbmNlIHdyYXBwZXJzLCB3cmFwIHJlc3VsdCBhcyBhbiBFbmNvZGVkSlNW
YWx1ZS4KK2lubGluZSB2b2lkIHRocm93Vk1FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlv
biogZXhjZXB0aW9uKSB7IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
KTsgfQogaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1FcnJvcihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgZXJyb3IpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93
RXhjZXB0aW9uKGV4ZWMsIGVycm9yKSk7IH0KIGlubGluZSBFbmNvZGVkSlNWYWx1ZSB0aHJvd1ZN
VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
VHlwZUVycm9yKGV4ZWMpKTsgfQogaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1UeXBlRXJy
b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgeyByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSkpOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
b25zdCBDbGFzc0luZm8gRXhjZXB0aW9uOjpzX2luZm8gPSB7ICJFeGNlcHRpb24iLCAmQmFzZTo6
c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEV4Y2VwdGlvbikgfTsKKworRXhjZXB0aW9u
KiBFeGNlcHRpb246OmNyZWF0ZShWTSYgdm0sIEpTVmFsdWUgdGhyb3duVmFsdWUpCit7CisgICAg
RXhjZXB0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFeGNlcHRpb24+
KHZtLmhlYXApKSBFeGNlcHRpb24odm0sIHRocm93blZhbHVlKTsKKyAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEV4Y2VwdGlvbjo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzdGF0
aWNfY2FzdDxFeGNlcHRpb24qPihjZWxsKTsKKyAgICBleGNlcHRpb24tPkV4Y2VwdGlvbjo6fkV4
Y2VwdGlvbigpOworfQorCitTdHJ1Y3R1cmUqIEV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7
CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2
b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIEV4Y2VwdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxFeGNlcHRpb24q
PihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAg
IGlmICghdGhpc09iamVjdC0+bV92YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdGhp
c09iamVjdC0+bV92YWx1ZS5nZXQoKS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3ZhbHVlKTsKK30KKworRXhjZXB0aW9uOjpFeGNl
cHRpb24oVk0mIHZtLCBKU1ZhbHVlIHRocm93blZhbHVlKQorICAgIDogQmFzZSh2bSwgdm0uZXhj
ZXB0aW9uU3RydWN0dXJlLmdldCgpKQoreworICAgIG1fdmFsdWUuc2V0KHZtLCB0aGlzLCB0aHJv
d25WYWx1ZSk7CisKKyAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKKyAgICB2bS5p
bnRlcnByZXRlci0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlKTsKKyAgICBtX3N0YWNrID0gUmVm
Q291bnRlZEFycmF5PFN0YWNrRnJhbWU+KHN0YWNrVHJhY2UpOworfQorCitFeGNlcHRpb246On5F
eGNlcHRpb24oKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRXhjZXB0aW9uX2gKKyNkZWZpbmUgRXhjZXB0aW9uX2gKKworI2luY2x1ZGUgIkludGVy
cHJldGVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKyAgICAKK2NsYXNzIEV4Y2VwdGlvbiA6IHB1YmxpYyBKU09iamVjdCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU09iamVjdCBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFn
czsKKworICAgIHN0YXRpYyBFeGNlcHRpb24qIGNyZWF0ZShWTSYsIEpTVmFsdWUgdGhyb3duVmFs
dWUpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Cisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIHN0YXRpYyBwdHJkaWZmX3QgdmFs
dWVPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGNlcHRp
b24sIG1fdmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBFeGNlcHRpb24qIGNhc3QoSlNWYWx1
ZSBleGNlcHRpb25Bc0pTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNDYXN0PEV4Y2Vw
dGlvbio+KGV4Y2VwdGlvbkFzSlNWYWx1ZS5hc0NlbGwoKSk7CisgICAgfQorCisgICAgSlNWYWx1
ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KKyAgICBjb25zdCBSZWZD
b3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIHN0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjazsg
fQorCisgICAgYm9vbCBkaWROb3RpZnlJbnNwZWN0b3JPZlRocm93KCkgY29uc3QgeyByZXR1cm4g
bV9kaWROb3RpZnlJbnNwZWN0b3JPZlRocm93OyB9CisgICAgdm9pZCBzZXREaWROb3RpZnlJbnNw
ZWN0b3JPZlRocm93KCkgeyBtX2RpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3cgPSB0cnVlOyB9CisK
KyAgICB+RXhjZXB0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgRXhjZXB0aW9uKFZNJiwgSlNWYWx1
ZSB0aHJvd25WYWx1ZSk7CisKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKKyAg
ICBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4gbV9zdGFjazsKKyAgICBib29sIG1fZGlkTm90
aWZ5SW5zcGVjdG9yT2ZUaHJvdyB7IGZhbHNlIH07CisKKyAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
eGNlcHRpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uSGVscGVycy5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1l
LmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU05v
dEFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTU5LDE3ICs2MCwxMSBA
QCBKU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwCiAgICAgcmV0dXJuIFRl
cm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKCp2bSk7CiB9CiAKLWJvb2wgaXNUZXJtaW5h
dGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTT2JqZWN0KiBvYmplY3QpCitib29sIGlzVGVybWluYXRl
ZEV4ZWN1dGlvbkV4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2VwdGlvbikKIHsKLSAgICByZXR1cm4g
b2JqZWN0LT5pbmhlcml0cyhUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmluZm8oKSk7CisgICAg
cmV0dXJuIGV4Y2VwdGlvbi0+dmFsdWUoKS5pbmhlcml0cyhUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3I6OmluZm8oKSk7CiB9CiAKLWJvb2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKFRlcm1pbmF0ZWRFeGVj
dXRpb25FcnJvcjo6aW5mbygpKTsKLX0KLQotCiBKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxv
d0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIk1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkLiIpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbkhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIHR5cGVkZWYgSlNPYmplY3QqICgqRXJyb3JGYWN0b3J5KShFeGVjU3RhdGUq
LCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CiAKIEpTT2Jq
ZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKFZNKik7Ci1ib29sIGlzVGVy
bWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU09iamVjdCopOwotSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNWYWx1ZSk7CitKU19FWFBPUlRf
UFJJVkFURSBib29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihFeGNlcHRpb24qKTsK
IEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqLCBKU1Zh
bHVlLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CiBKU19F
WFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0
ZSopOwogSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2
ICsyNCw3IEBACiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAKICNpbmNsdWRlICJFcnJvci5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC03NSw3ICs3
Niw3IEBAIEpTVmFsdWUgY2FsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAvLyBG
SVhNRTogU29tZSBjYWxsZXJzIG1heSBpbnZva2UgZ2V0KCkgd2l0aG91dCBjaGVja2luZyBmb3Ig
YW4gZXhjZXB0aW9uIGZpcnN0LgogICAgIC8vIFdlIHdvcmsgYXJvdW5kIHRoYXQgYnkgY2hlY2tp
bmcgaGVyZS4KICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBl
eGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1
ZSgpOwogCiAgICAgSlNPYmplY3QqIGdldHRlciA9IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihnZXR0
ZXJTZXR0ZXIpLT5nZXR0ZXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODUxMTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIEpTVmFsdWUgaXRlcmF0b3JTdGVwKEV4ZWNT
dGF0ZSogZXhlYywgSlMKIAogdm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBpdGVyYXRvcikKIHsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24q
IGV4Y2VwdGlvbiA9IG51bGxwdHI7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAg
ICAgICAgIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwpAQCAtOTksNyArOTksNyBAQCB2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChyZXR1cm5GdW5jdGlv
bi5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkKKyAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNyw3ICsx
MDcsNyBAQCB2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgQ2Fs
bERhdGEgcmV0dXJuRnVuY3Rpb25DYWxsRGF0YTsKICAgICBDYWxsVHlwZSByZXR1cm5GdW5jdGlv
bkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmV0dXJuRnVuY3Rpb24sIHJldHVybkZ1bmN0aW9uQ2Fs
bERhdGEpOwogICAgIGlmIChyZXR1cm5GdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkg
ewotICAgICAgICBpZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIGlmIChleGNlcHRp
b24pCiAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwpAQCAt
MTE3LDcgKzExNyw3IEBAIHZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXR1cm5GdW5jdGlvbkFyZ3VtZW50czsKICAgICBK
U1ZhbHVlIGlubmVyUmVzdWx0ID0gY2FsbChleGVjLCByZXR1cm5GdW5jdGlvbiwgcmV0dXJuRnVu
Y3Rpb25DYWxsVHlwZSwgcmV0dXJuRnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0b3IsIHJldHVybkZ1
bmN0aW9uQXJndW1lbnRzKTsKIAotICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkgeworICAg
IGlmIChleGNlcHRpb24pIHsKICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBleGNlcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVk
ZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiR2V0
dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgiCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKICNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgogI2luY2x1
ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgpAQCAt
MTM2LDcgKzEzNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMK
IAogICAgIC8vIDE0LiBJZiByZXN1bHQgaXMgYW4gYWJydXB0IGNvbXBsZXRpb24sIGNhbGwgUHJv
bWlzZVJlamVjdChwcm9taXNlLCByZXN1bHQuW1t2YWx1ZV1dKS4KICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRp
b24oKTsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKS0+dmFs
dWUoKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAgICAgICBwcm9taXNl
LT5yZWplY3Qodm0sIGV4Y2VwdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3BwCShyZXZpc2lvbiAxODUxMTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKICNp
bmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
UHJvbWlzZS5oIgpAQCAtMTUwLDcgKzE1MSw3IEBAIFRoZW5hYmxlU3RhdHVzIHVwZGF0ZURlZmVy
cmVkRnJvbVBvdGVudGkKICAgICAgICAgLy8gaS4gTGV0ICdyZWplY3RSZXN1bHQnIGJlIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kIG9mCiAgICAgICAg
IC8vICAgIGRlZmVycmVkLltbUmVqZWN0XV0gd2l0aCB1bmRlZmluZWQgYXMgdGhpc0FyZ3VtZW50
IGFuZCBhIExpc3QgY29udGFpbmluZwogICAgICAgICAvLyAgICB0aGVuLltbdmFsdWVdXSBhcyBh
cmd1bWVudHNMaXN0LgotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlv
bigpOworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1
ZSgpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgICAgIHBlcmZvcm1E
ZWZlcnJlZFJlamVjdChleGVjLCBkZWZlcnJlZCwgZXhjZXB0aW9uKTsKQEAgLTE4NSw3ICsxODYs
NyBAQCBUaGVuYWJsZVN0YXR1cyB1cGRhdGVEZWZlcnJlZEZyb21Qb3RlbnRpCiAgICAgICAgIC8v
IGkuIExldCAncmVqZWN0UmVzdWx0JyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ2Fs
bF1dIGludGVybmFsIG1ldGhvZCBvZgogICAgICAgICAvLyAgICBkZWZlcnJlZC5bW1JlamVjdF1d
IHdpdGggdW5kZWZpbmVkIGFzIHRoaXNBcmd1bWVudCBhbmQgYSBMaXN0IGNvbnRhaW5pbmcKICAg
ICAgICAgLy8gICAgdGhlbkNhbGxSZXN1bHQuW1t2YWx1ZV1dIGFzIGFyZ3VtZW50c0xpc3QuCi0g
ICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIEpT
VmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7CiAgICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgcGVyZm9ybURlZmVycmVkUmVqZWN0KGV4
ZWMsIGRlZmVycmVkLCBleGNlcHRpb24pOwpAQCAtMjI4LDcgKzIyOSw3IEBAIHZvaWQgcGVyZm9y
bURlZmVycmVkUmVqZWN0KEV4ZWNTdGF0ZSogZXgKIEpTVmFsdWUgYWJydXB0UmVqZWN0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkKQogewogICAgIEFTU0VS
VChleGVjLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgSlNWYWx1ZSBhcmd1bWVudCA9IGV4ZWMtPmV4
Y2VwdGlvbigpOworICAgIEpTVmFsdWUgYXJndW1lbnQgPSBleGVjLT5leGNlcHRpb24oKS0+dmFs
dWUoKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgLy8gaS4gTGV0ICdyZWpl
Y3RSZXN1bHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwg
bWV0aG9kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VSZWFj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9taXNlUmVhY3Rpb24uY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb21pc2VSZWFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKICNpbmNsdWRlICJFcnJvci5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCkBA
IC04OCw3ICs4OSw3IEBAIHZvaWQgRXhlY3V0ZVByb21pc2VSZWFjdGlvbk1pY3JvdGFzazo6cnUK
ICAgICAvLyAgICBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YgZGVmZXJyZWQuW1tSZWplY3Rd
XSBwYXNzaW5nIHVuZGVmaW5lZCBhcyB0aGlzQXJndW1lbnQKICAgICAvLyAgICBhbmQgYSBMaXN0
IGNvbnRhaW5pbmcgaGFuZGxlclJlc3VsdC5bW3ZhbHVlXV0gYXMgYXJndW1lbnRzTGlzdC4KICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24g
PSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5l
eGNlcHRpb24oKS0+dmFsdWUoKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAog
ICAgICAgICBwZXJmb3JtRGVmZXJyZWRSZWplY3QoZXhlYywgZGVmZXJyZWQsIGV4Y2VwdGlvbik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxODUxMTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRp
c2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkVycm9ySW5zdGFuY2UuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb24uaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCkBAIC0yMzUsNiArMjM2
LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIHdlYWtN
YXBEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgV2Vha01hcERhdGE6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFZhbHVlU3RydWN0dXJlLnNldCgqdGhp
cywgSW5mZXJyZWRWYWx1ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwog
ICAgIGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlvblJhcmVEYXRh
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgZXhjZXB0aW9uU3Ry
dWN0dXJlLnNldCgqdGhpcywgRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAjaWYgRU5BQkxFKFBST01JU0VTKQogICAgIHByb21pc2VEZWZlcnJlZFN0cnVj
dHVyZS5zZXQoKnRoaXMsIEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvbWlzZVJlYWN0aW9uU3RydWN0dXJlLnNldCgqdGhpcywg
SlNQcm9taXNlUmVhY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
QEAgLTU0NSw3ICs1NDcsNyBAQCB2b2lkIFZNOjpyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpCiAg
ICAgaGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQogCi1KU1ZhbHVlIFZNOjp0aHJvd0V4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXJyb3IpCit2b2lkIFZNOjp0aHJvd0V4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIGlmIChP
cHRpb25zOjpicmVha09uVGhyb3coKSkgewogICAgICAgICBkYXRhTG9nKCJJbiBjYWxsIGZyYW1l
ICIsIFJhd1BvaW50ZXIoZXhlYyksICIgZm9yIGNvZGUgYmxvY2sgIiwgKmV4ZWMtPmNvZGVCbG9j
aygpLCAiXG4iKTsKQEAgLTU1MywzNyArNTU1LDI0IEBAIEpTVmFsdWUgVk06OnRocm93RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXgKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGV4ZWMgPT0gdG9wQ2Fs
bEZyYW1lIHx8IGV4ZWMgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCkgfHwgZXhlYyA9PSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7
Ci0gICAgCi0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Ci0gICAgaW50ZXJwcmV0
ZXItPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7Ci0gICAgbV9leGNlcHRpb25TdGFjayA9IFJl
ZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPihzdGFja1RyYWNlKTsKLSAgICBtX2V4Y2VwdGlvbiA9
IGVycm9yOwotCi0gICAgcmV0dXJuIGVycm9yOwotfQotICAgIAotSlNPYmplY3QqIFZNOjp0aHJv
d0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBlcnJvcikKLXsKLSAgICByZXR1
cm4gYXNPYmplY3QodGhyb3dFeGNlcHRpb24oZXhlYywgSlNWYWx1ZShlcnJvcikpKTsKLX0KLXZv
aWQgVk06OmdldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJy
YXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKQotewotICAgIGV4Y2VwdGlvbiA9IG1fZXhj
ZXB0aW9uOwotICAgIGV4Y2VwdGlvblN0YWNrID0gbV9leGNlcHRpb25TdGFjazsKLX0KLXZvaWQg
Vk06OnNldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJyYXk8
U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKQotewotICAgIG1fZXhjZXB0aW9uID0gZXhjZXB0
aW9uOwotICAgIG1fZXhjZXB0aW9uU3RhY2sgPSBleGNlcHRpb25TdGFjazsKKyAgICBzZXRFeGNl
cHRpb24oZXhjZXB0aW9uKTsKIH0KIAotdm9pZCBWTTo6Y2xlYXJFeGNlcHRpb24oKQorSlNWYWx1
ZSBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRocm93blZhbHVl
KQogewotICAgIG1fZXhjZXB0aW9uID0gSlNWYWx1ZSgpOworICAgIEV4Y2VwdGlvbiogZXhjZXB0
aW9uOworICAgIGlmICh0aHJvd25WYWx1ZS5pc0NlbGwoKSAmJiB0aHJvd25WYWx1ZS5hc0NlbGwo
KS0+c3RydWN0dXJlKCkgPT0gZXhjZXB0aW9uU3RydWN0dXJlLmdldCgpKQorICAgICAgICBleGNl
cHRpb24gPSBqc0Nhc3Q8RXhjZXB0aW9uKj4odGhyb3duVmFsdWUuYXNDZWxsKCkpOworICAgIGVs
c2UKKyAgICAgICAgZXhjZXB0aW9uID0gRXhjZXB0aW9uOjpjcmVhdGUoKnRoaXMsIHRocm93blZh
bHVlKTsKKworICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgcmV0dXJu
IEpTVmFsdWUoZXhjZXB0aW9uKTsKIH0KLXZvaWQgVk06OiBjbGVhckV4Y2VwdGlvblN0YWNrKCkK
KworSlNPYmplY3QqIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBlcnJvcikKIHsKLSAgICBtX2V4Y2VwdGlvblN0YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNr
RnJhbWU+KCk7CisgICAgcmV0dXJuIGFzT2JqZWN0KHRocm93RXhjZXB0aW9uKGV4ZWMsIEpTVmFs
dWUoZXJyb3IpKSk7CiB9CiAKIHZvaWQgVk06OnNldFN0YWNrUG9pbnRlckF0Vk1FbnRyeSh2b2lk
KiBzcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsNyArNTgsNiBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KICNpbmNsdWRlIDx3
dGYvU3RhY2tCb3VuZHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4K
QEAgLTc4LDYgKzc3LDcgQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29kZUNhY2hlOwogY2xh
c3MgQ29tbW9uSWRlbnRpZmllcnM7CiBjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBFeGNlcHRpb247
CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIFR5cGVQcm9maWxlcjsKIGNsYXNzIFR5cGVQcm9m
aWxlckxvZzsKQEAgLTI3NCw2ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRW
YWx1ZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvblJhcmVEYXRhU3Ry
dWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV4Y2VwdGlvblN0cnVjdHVyZTsKICNpZiBF
TkFCTEUoUFJPTUlTRVMpCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZURlZmVycmVkU3Ry
dWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VSZWFjdGlvblN0cnVjdHVyZTsK
QEAgLTM3MiwxNCArMzczLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihWTSwgdGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwogICAgIH0KIAotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgY2xlYXJFeGNlcHRpb24oKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGNsZWFyRXhjZXB0aW9uU3RhY2soKTsKLSAgICB2b2lkIGdldEV4Y2VwdGlvbkluZm8oSlNW
YWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0
YWNrKTsKLSAgICB2b2lkIHNldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZD
b3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKTsKLSAgICBKU1ZhbHVlIGV4
Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9Ci0gICAgSlNWYWx1ZSogYWRk
cmVzc09mRXhjZXB0aW9uKCkgeyByZXR1cm4gJm1fZXhjZXB0aW9uOyB9Ci0gICAgY29uc3QgUmVm
Q291bnRlZEFycmF5PFN0YWNrRnJhbWU+JiBleGNlcHRpb25TdGFjaygpIGNvbnN0IHsgcmV0dXJu
IG1fZXhjZXB0aW9uU3RhY2s7IH0KKyAgICB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyBtX2V4Y2Vw
dGlvbiA9IG51bGxwdHI7IH0KKyAgICB2b2lkIHNldEV4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2Vw
dGlvbikgeyBtX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsgfQogCisgICAgRXhjZXB0aW9uKiBleGNl
cHRpb24oKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbjsgfQorICAgIEpTQ2VsbCoqIGFkZHJl
c3NPZkV4Y2VwdGlvbigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKio+KCZtX2V4
Y2VwdGlvbik7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhyb3dFeGNlcHRpb24o
RXhlY1N0YXRlKiwgRXhjZXB0aW9uKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0
aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU09iamVjdCogdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIApAQCAt
NTY5LDEyICs1NjksMTEgQEAgcHJpdmF0ZToKICNlbmRpZgogI2VuZGlmCiAgICAgdm9pZCogbV9s
YXN0U3RhY2tUb3A7Ci0gICAgSlNWYWx1ZSBtX2V4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIG1f
ZXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9pbkRlZmluZU93blByb3BlcnR5Owog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDb2RlQ2FjaGU+IG1fY29kZUNhY2hlOwogICAgIExlZ2FjeVBy
b2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4
ZWN1dGFibGVzPiBtX2J1aWx0aW5FeGVjdXRhYmxlczsKLSAgICBSZWZDb3VudGVkQXJyYXk8U3Rh
Y2tGcmFtZT4gbV9leGNlcHRpb25TdGFjazsKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFdh
dGNocG9pbnRTZXQ+PiBtX2ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludFNldHM7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFR5cGVQcm9maWxlcj4gbV90eXBlUHJvZmlsZXI7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFR5cGVQcm9maWxlckxvZz4gbV90eXBlUHJvZmlsZXJMb2c7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHJldmlzaW9uIDE4NTEx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDYgQEAgVk1FbnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUo
Vk0mIHZtLCBKU0dsbwogICAgICAgICAvLyBvYnNlcnZlIHRpbWUgeG9uZSBjaGFuZ2VzLgogICAg
ICAgICB2bS5yZXNldERhdGVDYWNoZSgpOwogICAgIH0KLQotICAgIC8vIENsZWFyIHRoZSBjYXB0
dXJlZCBleGNlcHRpb24gc3RhY2sgYmV0d2VlbiBlbnRyaWVzCi0gICAgdm0uY2xlYXJFeGNlcHRp
b25TdGFjaygpOwogfQogCiB2b2lkIFZNRW50cnlTY29wZTo6c2V0RW50cnlTY29wZURpZFBvcExp
c3RlbmVyKHZvaWQqIGtleSwgRW50cnlTY29wZURpZFBvcExpc3RlbmVyIGxpc3RlbmVyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9FeGNlcHRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0V4
Y2VwdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9FeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNp
Zm5kZWYgV2ViQ29yZV9GV0RfRXhjZXB0aW9uX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfRXhjZXB0
aW9uX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9FeGNlcHRpb24uaD4KKyNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0Rh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMCArNzMsMTAgQEAgSlNWYWx1ZSBKU0NhbGxi
YWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSgogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9u
Q2FsbChjb250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRp
b247CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjb250
ZXh0LT5pc0RvY3VtZW50KCkKLSAgICAgICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwo
ZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCAmZXhj
ZXB0aW9uKQotICAgICAgICA6IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsICZleGNlcHRpb24pOworICAgICAgICA/IEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0
aGlzVmFsdWUsIGFyZ3MsIGV4Y2VwdGlvbikKKyAgICAgICAgOiBKU0M6OmNhbGwoZXhlYywgZnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pOwog
CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCBj
b250ZXh0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0
aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Myw4ICs5Myw4IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6
bG9va3VwTmEKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5k
KGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHByZWZpeCkpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRp
b247Ci0gICAgSlNWYWx1ZSByZXR2YWwgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhl
YywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV9jdXN0b21SZXNvbHZlci5nZXQoKSwg
YXJncywgJmV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CisgICAgSlNWYWx1
ZSByZXR2YWwgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwgbV9jdXN0b21SZXNvbHZlci5nZXQoKSwgYXJncywgZXhjZXB0aW9u
KTsKIAogICAgIFN0cmluZyByZXN1bHQ7CiAgICAgaWYgKGV4Y2VwdGlvbikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNl
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JI
YW5kbGluZ1Njb3BlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KICNpbmNsdWRl
IDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rp
b24uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTEzOCw3ICsxMzksNyBAQCBKU0M6OkpTVmFs
dWUganNBcnJheShKU0M6OkV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0
QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0LCBsaXN0KTsKIH0KIAotdm9pZCByZXBvcnRFeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBj
YWNoZWRTY3JpcHQpCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2Vw
dGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChleGVjLT52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwog
ICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSkKQEAgLTE0
OCw3ICsxNDksNiBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAK
ICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0
YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4Q2Fs
bFN0YWNrU2l6ZVRvQ2FwdHVyZSkpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAg
ZXhlYy0+Y2xlYXJTdXBwbGVtZW50YXJ5RXhjZXB0aW9uSW5mbygpOwogCiAgICAgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSBq
c0R5bmFtaWNDYXN0PEpTRE9NV2luZG93Kj4oZ2xvYmFsT2JqZWN0KSkgewpAQCAtMTY2LDE0ICsx
NjYsMTMgQEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIH0K
IAogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKEV4Y2VwdGlvbkJhc2UqIGV4Y2Vw
dGlvbkJhc2UgPSB0b0V4Y2VwdGlvbkJhc2UoZXhjZXB0aW9uKSkKKyAgICBpZiAoRXhjZXB0aW9u
QmFzZSogZXhjZXB0aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFzZShleGNlcHRpb24tPnZhbHVlKCkp
KQogICAgICAgICBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb25CYXNlLT5tZXNzYWdlKCkgKyAiOiAi
ICArIGV4Y2VwdGlvbkJhc2UtPmRlc2NyaXB0aW9uKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8v
IEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNwZWN0b3I6IFdlYkNv
cmU6OnJlcG9ydEV4Y2VwdGlvbiBzaG91bGQgbm90IGV2YWx1YXRlIEphdmFTY3JpcHQgaGFuZGxp
bmcgZXhjZXB0aW9ucwogICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY3VzdG9uIGV4Y2VwdGlvbiBv
YmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5IGFuZCBnZXQgYSBuaWNlIHN0cmluZyBy
ZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4KLSAgICAgICAgZXJyb3JNZXNzYWdlID0g
ZXhjZXB0aW9uLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgZXJyb3JNZXNz
YWdlID0gZXhjZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJTdXBwbGVt
ZW50YXJ5RXhjZXB0aW9uSW5mbygpOwogICAgIH0KIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKQEAgLTE4Miw3ICsxODEsNyBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTCiAKIHZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAg
ICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNp
b24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0Nyw3ICsyNDcsNyBAQCB2b2lkIGFkZEltcHVyZVByb3BlcnR5
KGNvbnN0IEF0b21pY1N0cmluCiAKIGNvbnN0IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVG
b3JHbG9iYWxEYXRhKEpTQzo6Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUp
OwogCi1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogPSBudWxscHRyKTsKK1dFQkNP
UkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNl
cHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7CiB2b2lkIHJlcG9ydEN1cnJlbnRFeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKIAogSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OCwxMCArOTgsMTAgQEAgdm9pZCBKU0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQo
U2NyaXB0RQogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIFZN
RW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCB2bS5lbnRyeVNjb3BlID8gdm0uZW50cnlTY29wZS0+
Z2xvYmFsT2JqZWN0KCkgOiBnbG9iYWxPYmplY3QpOwogCi0gICAgICAgIEpTVmFsdWUgZXhjZXB0
aW9uOworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICAgICAgSlNWYWx1ZSByZXR1
cm5WYWx1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKQotICAgICAgICAg
ICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywganNGdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ3MsICZleGNlcHRpb24pCi0gICAgICAgICAg
ICA6IEpTQzo6Y2FsbChleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2Jh
bE9iamVjdCwgYXJncywgJmV4Y2VwdGlvbik7CisgICAgICAgICAgICA/IEpTTWFpblRocmVhZEV4
ZWNTdGF0ZTo6Y2FsbChleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2Jh
bE9iamVjdCwgYXJncywgZXhjZXB0aW9uKQorICAgICAgICAgICAgOiBKU0M6OmNhbGwoZXhlYywg
anNGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ3MsIGV4Y2Vw
dGlvbik7CiAKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRDdXJyZW50RXZlbnQoc2F2ZWRFdmVu
dCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDEwICsxMjQsMTAgQEAg
dm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpp
bnN0cnVtZW50RnVuY3Rpb25DYWxsKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNhbGxUeXBlLCBj
YWxsRGF0YSk7CiAKICAgICAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBoYW5kbGVFdmVudEZ1bmN0
aW9uID09IGpzRnVuY3Rpb24gPyB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgZXZlbnQtPmN1cnJl
bnRUYXJnZXQoKSkgOiBqc0Z1bmN0aW9uOwotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAg
ICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgICAgIEpTVmFsdWUgcmV0dmFsID0gc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpCi0gICAgICAgICAgICA/IEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgJmV4Y2VwdGlvbikKLSAgICAgICAgICAgIDogSlND
OjpjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhp
c1ZhbHVlLCBhcmdzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgICAgID8gSlNNYWluVGhyZWFkRXhl
Y1N0YXRlOjpjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pCisgICAgICAgICAgICA6IEpTQzo6Y2FsbChl
eGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwg
YXJncywgZXhjZXB0aW9uKTsKIAogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZENhbGxGdW5jdGlvbihjb29raWUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0
ZS5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE4ICs0NiwxOCBA
QCB2b2lkIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZGlkTGVhdmVTY3JpCiAgICAgTXV0YXRpb25P
YnNlcnZlcjo6ZGVsaXZlckFsbE11dGF0aW9ucygpOwogfQogCi1KU0M6OkpTVmFsdWUgZnVuY3Rp
b25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpD
YWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJn
TGlzdCYgYXJncywgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCitKU0M6OkpTVmFsdWUgZnVuY3Rp
b25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpD
YWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJn
TGlzdCYgYXJncywgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBp
ZiAoaXNNYWluVGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBKU01haW5UaHJlYWRFeGVjU3RhdGU6
OmNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVl
LCBhcmdzLCBleGNlcHRpb24pOwotICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb25P
YmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pOwor
ICAgICAgICByZXR1cm4gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9u
T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgcmV0dXJuZWRFeGNl
cHRpb24pOworICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGNhbGxU
eXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCByZXR1cm5lZEV4Y2VwdGlvbik7CiB9CiAK
LUpTQzo6SlNWYWx1ZSBldmFsdWF0ZUhhbmRsZXJGcm9tQW55VGhyZWFkKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCitKU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5k
bGVyRnJvbUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VD
b2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0
dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgaWYgKGlzTWFpblRocmVhZCgpKQotICAgICAgICByZXR1
cm4gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1
ZSwgZXhjZXB0aW9uKTsKLSAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRo
aXNWYWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTTWFpblRocmVhZEV4ZWNTdGF0
ZTo6ZXZhbHVhdGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIHJldHVybmVkRXhjZXB0aW9uKTsK
KyAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1ZSwgcmV0dXJu
ZWRFeGNlcHRpb24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE2ICs1MCwyMiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBzX21haW5UaHJlYWRTdGF0ZTsKICAgICB9OwogICAgIAotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY2FsbChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1
bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRh
JiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBh
cmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbikKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNh
bGwoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlND
OjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpFeGNlcHRp
b24qJiByZXR1cm5lZEV4Y2VwdGlvbikKICAgICB7CiAgICAgICAgIEpTTWFpblRocmVhZEV4ZWNT
dGF0ZSBjdXJyZW50U3RhdGUoZXhlYyk7Ci0gICAgICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywg
ZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNl
cHRpb24pOworICAgICAgICByZXR1cm4gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBj
YWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgcmV0dXJuZWRFeGNlcHRpb24pOwog
ICAgIH07CiAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBl
dmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3Vy
Y2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNl
cHRpb24pCiAgICAgewogICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGUgY3VycmVudFN0YXRl
KGV4ZWMpOwotICAgICAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNW
YWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6ZXZhbHVhdGUoZXhlYywgc291
cmNlLCB0aGlzVmFsdWUsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICB9OworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpT
b3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUgPSBKU0M6OkpTVmFsdWUo
KSkKKyAgICB7CisgICAgICAgIEpTQzo6RXhjZXB0aW9uKiB1bnVzZWQ7CisgICAgICAgIHJldHVy
biBldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1ZSwgdW51c2VkKTsKICAgICB9OwogCiAg
ICAgc3RhdGljIHZvaWQgcnVuVGFzayhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpNaWNyb3Rh
c2smIHRhc2spCkBAIC0xMjEsOCArMTI3LDggQEAgcHJpdmF0ZToKICAgICBKU0M6OkV4ZWNTdGF0
ZSogbV9wcmV2aW91c1N0YXRlOwogfTsKIAotSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uQ2FsbEhhbmRs
ZXJGcm9tQW55VGhyZWFkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2Jq
ZWN0LCBKU0M6OkNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiwgSlNDOjpKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlv
bik7Ci1KU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5kbGVyRnJvbUFueVRocmVhZChKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpT
Qzo6SlNWYWx1ZSogZXhjZXB0aW9uKTsKK0pTQzo6SlNWYWx1ZSBmdW5jdGlvbkNhbGxIYW5kbGVy
RnJvbUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgSlNDOjpDYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYsIEpTQzo6SlNWYWx1ZSB0aGlz
VmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5l
ZEV4Y2VwdGlvbik7CitKU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5kbGVyRnJvbUFueVRocmVhZChK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIEpTQzo6SlNWYWx1ZSB0aGlz
VmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pOwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFE
ZXZpY2VzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lZGlhRGV2aWNlc0N1c3RvbS5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFEZXZpY2VzQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgogI2luY2x1ZGUg
IkpTTWVkaWFTdHJlYW0uaCIKICNpbmNsdWRlICJKU05hdmlnYXRvclVzZXJNZWRpYUVycm9yLmgi
CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IApAQCAtNTAsNyArNTEsOSBAQCBKU1ZhbHVlIEpTTWVkaWFEZXZpY2VzOjpnZXRVc2VyTWVkaWEo
RXhlCiAKICAgICBEaWN0aW9uYXJ5IG9wdGlvbnMoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICB3cmFwcGVyLnJlamVjdChl
eGVjLT5leGNlcHRpb24oKSk7CisgICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+
ZXhjZXB0aW9uKCk7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHdy
YXBwZXIucmVqZWN0KGV4Y2VwdGlvbi0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybiB3cmFwcGVy
LnByb21pc2UoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TXV0YXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODcsOCArODcsOCBAQCB2b2lkIEpTTXV0YXRpb25DYWxsYmFjazo6Y2FsbChjb25zdCBW
ZWN0CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjppbnN0cnVtZW50RnVuY3Rpb25DYWxsKGNvbnRleHQsIGNhbGxUeXBl
LCBjYWxsRGF0YSk7CiAKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICBKU01haW5UaHJlYWRF
eGVjU3RhdGU6OmNhbGwoZXhlYywgY2FsbGJhY2ssIGNhbGxUeXBlLCBjYWxsRGF0YSwganNPYnNl
cnZlciwgYXJncywgJmV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CisgICAg
SlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGNhbGxiYWNrLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGpzT2JzZXJ2ZXIsIGFyZ3MsIGV4Y2VwdGlvbik7CiAKICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihjb29raWUsIGNvbnRleHQpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZUpTU3RyZWFtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZUpTU3RyZWFtLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVKU1N0
cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGdldFByb3BlcnR5RnJvbU9iagogICAgIHJldHVybiBvYmplY3QtPmdldChleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGlkZW50aWZpZXIpKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGNhbGxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUganNGdW5j
dGlvbiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cywgSlNWYWx1
ZSogZXhjZXB0aW9uKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGNhbGxGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUganNGdW5jdGlvbiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3VtZW50cywgRXhjZXB0aW9uKiYgZXhjZXB0aW9uKQogewogICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoanNGdW5jdGlv
biwgY2FsbERhdGEpOwpAQCAtMTAwLDggKzEwMCw4IEBAIHZvaWQgUmVhZGFibGVKU1N0cmVhbTo6
U291cmNlOjpzdGFydChFeGUKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAg
ICAgYXJndW1lbnRzLmFwcGVuZChyZWFkYWJsZVN0cmVhbS5qc0NvbnRyb2xsZXIoZXhlYywgZ2xv
YmFsT2JqZWN0KCkpKTsKIAotICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgIGNhbGxGdW5jdGlv
bigmZXhlYywgc3RhcnRGdW5jdGlvbiwgbV9zb3VyY2UuZ2V0KCksIGFyZ3VtZW50cywgJmV4Y2Vw
dGlvbik7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CisgICAgY2FsbEZ1bmN0aW9uKCZleGVj
LCBzdGFydEZ1bmN0aW9uLCBtX3NvdXJjZS5nZXQoKSwgYXJndW1lbnRzLCBleGNlcHRpb24pOwog
CiAgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAgICB0aHJvd1ZNRXJyb3IoJmV4ZWMsIGV4Y2Vw
dGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFj
dGlvbi5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDExICs5OSwxMSBAQCB2
b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZUZ1bmN0aW9uSW5DCiAKICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjppbnN0
cnVtZW50RnVuY3Rpb25DYWxsKCZjb250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwogCi0gICAg
SlNWYWx1ZSBleGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgaWYgKGlz
PERvY3VtZW50Pihjb250ZXh0KSkKLSAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxs
KGV4ZWMsIG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBh
cmdzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4
ZWMsIG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdz
LCBleGNlcHRpb24pOwogICAgIGVsc2UKLSAgICAgICAgSlNDOjpjYWxsKGV4ZWMsIG1fZnVuY3Rp
b24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCAmZXhjZXB0aW9u
KTsKKyAgICAgICAgSlNDOjpjYWxsKGV4ZWMsIG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBlLCBj
YWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pOwogCiAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCAmY29udGV4dCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDkgKzE2MCw4IEBAIERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXIKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0
ZVNjcmlwdChtX2ZyYW1lLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuc3RhcnRMaW5lKCkpOwogCi0g
ICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotCi0gICAgSlNWYWx1ZSByZXR1cm5WYWx1
ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywganNTb3VyY2VDb2RlLCBz
aGVsbCwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEV4Y2VwdGlvbiogZXZhbHVhdGlvbkV4
Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRl
OjpldmFsdWF0ZShleGVjLCBqc1NvdXJjZUNvZGUsIHNoZWxsLCBldmFsdWF0aW9uRXhjZXB0aW9u
KTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRXZhbHVhdGVTY3JpcHQoY29v
a2llLCBtX2ZyYW1lKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSA8cnVudGltZS9Cb29sZWFuT2JqZWN0
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KICNpbmNsdWRlIDxydW50aW1l
L0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KICNpbmNsdWRlIDxydW50
aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIu
aD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg+CkBAIC0yNzAyLDcgKzI3
MDMsNyBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsCiAgICAgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgdmFsdWUsIG51bGxwdHIsIG51bGxwdHIpOwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAg
ICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUo
KSk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KQEAgLTI3MzIsNyArMjczMyw3IEBAIEpTVmFsdWVSZWYgU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpkZXNlcmkKICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemUoZXhlYywgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBudWxscHRyKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24g
PSB0b1JlZihleGVjLCBleGVjLT5leGNlcHRpb24oKSk7CisgICAgICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoZXhlYywgZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCkpOwogICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDcgQEAKICNpbmNsdWRlIDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KICNpbmNsdWRlIDxpbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25I
ZWxwZXJzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNMb2NrLmg+CkBAIC05OCwxNSArOTksMTUgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZShjbwogICAgIGlmIChpc0V4ZWN1dGlvbkZvcmJpZGRlbigpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBleGNlcHRpb247Ci0gICAgZXZh
bHVhdGUoc291cmNlQ29kZSwgJmV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbi5qc1ZhbHVl
KCkpIHsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKKyAgICBldmFsdWF0ZShzb3VyY2VDb2Rl
LCBleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0oKSk7Ci0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihtX3dvcmtlckdsb2JhbFNjb3Bl
V3JhcHBlci0+Z2xvYmFsRXhlYygpLCBleGNlcHRpb24uanNWYWx1ZSgpKTsKKyAgICAgICAgcmVw
b3J0RXhjZXB0aW9uKG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCksIGV4
Y2VwdGlvbik7CiAgICAgfQogfQogCi12b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlKiBleGNlcHRpb24pCit2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRl
KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0
dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgaWYgKGlzRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTExNiw4ICsxMTcsOCBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXI6OmV2YWx1YXRlKGNvCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV93b3JrZXJHbG9iYWxTY29w
ZVdyYXBwZXItPmdsb2JhbEV4ZWMoKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAot
ICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKLSAgICBKU0M6OmV2YWx1YXRlKGV4ZWMs
IHNvdXJjZUNvZGUuanNTb3VyY2VDb2RlKCksIG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5n
bG9iYWxUaGlzKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBKU0M6OkV4Y2VwdGlvbiog
ZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU0M6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZUNvZGUu
anNTb3VyY2VDb2RlKCksIG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxUaGlzKCks
IGV2YWx1YXRpb25FeGNlcHRpb24pOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBp
ZiAoKGV2YWx1YXRpb25FeGNlcHRpb24gJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9u
KGV2YWx1YXRpb25FeGNlcHRpb24pKSAKQEAgLTEzMSwxNiArMTMyLDE5IEBAIHZvaWQgV29ya2Vy
U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAw
OwogICAgICAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKICAgICAgICAgU3RyaW5nIHNvdXJjZVVS
TCA9IHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCk7Ci0gICAgICAgIGlmIChtX3dvcmtlckdsb2Jh
bFNjb3BlLT5zYW5pdGl6ZVNjcmlwdEVycm9yKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29s
dW1uTnVtYmVyLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuY2FjaGVkU2NyaXB0KCkpKQotICAgICAg
ICAgICAgKmV4Y2VwdGlvbiA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCptX3ZtLCBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZS5p
bXBsKCkpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSgqbV92bSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgICAgIGlm
IChtX3dvcmtlckdsb2JhbFNjb3BlLT5zYW5pdGl6ZVNjcmlwdEVycm9yKGVycm9yTWVzc2FnZSwg
bGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuY2FjaGVkU2Ny
aXB0KCkpKSB7CisgICAgICAgICAgICB2bS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVFcnJv
cihleGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSk7CisgICAgICAgICAgICBldmFsdWF0aW9uRXhj
ZXB0aW9uID0gdm0uZXhjZXB0aW9uKCk7CisgICAgICAgICAgICB2bS5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICB9CiAgICAgfQorICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXZhbHVhdGlvbkV4
Y2VwdGlvbjsKIH0KIAotdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzZXRFeGNlcHRpb24o
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGV4Y2VwdGlvbikKK3ZvaWQgV29ya2VyU2Ny
aXB0Q29udHJvbGxlcjo6c2V0RXhjZXB0aW9uKEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24pCiB7
Ci0gICAgbV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbEV4ZWMoKS0+dm0oKS50aHJv
d0V4Y2VwdGlvbihtX3dvcmtlckdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsRXhlYygpLCBleGNl
cHRpb24uanNWYWx1ZSgpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2VyR2xv
YmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCk7CisgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBleGNlcHRpb24pOwogfQogCiB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
OnNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24oKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw5ICs2MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29k
ZSYpOwotICAgICAgICB2b2lkIGV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmLCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSogZXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBldmFsdWF0ZShj
b25zdCBTY3JpcHRTb3VyY2VDb2RlJiwgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlv
bik7CiAKLSAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmKTsKKyAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oSlNDOjpFeGNlcHRpb24qKTsKIAog
ICAgICAgICAvLyBBc3luYyByZXF1ZXN0IHRvIHRlcm1pbmF0ZSBhIEpTIHJ1biBleGVjdXRpb24u
IEV2ZW50dWFsbHkgY2F1c2VzIHRlcm1pbmF0aW9uCiAgICAgICAgIC8vIGV4Y2VwdGlvbiByYWlz
ZWQgZHVyaW5nIEpTIGV4ZWN1dGlvbiwgaWYgdGhlIHdvcmtlciB0aHJlYWQgaGFwcGVucyB0byBy
dW4gSlMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1
Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cnVuRXZl
bnRMbwogICAgIH0gd2hpbGUgKHJlc3VsdCAhPSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkICYmICFt
X2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMpOwogfQogCi12b2lkIFdvcmtlclNjcmlwdERl
YnVnU2VydmVyOjpyZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSBleGNlcHRpb24pIGNvbnN0Cit2b2lkIFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjpyZXBv
cnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRp
b24pIGNvbnN0CiB7CiAgICAgV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1
Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtl
clNjcmlwdERlYnVnU2VydmVyLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoSlND
OjpKU0dsb2JhbE9iamVjdCopIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBydW5FdmVu
dExvb3BXaGlsZVBhdXNlZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRT
Y3JpcHQoSlNDOjpFeGVjU3RhdGUqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiopIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
V29ya2VyR2xvYmFsU2NvcGUqIG1fd29ya2VyR2xvYmFsU2NvcGU7CiAgICAgTGlzdGVuZXJTZXQg
bV9saXN0ZW5lcnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlw
dE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dl
YlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3ICsx
MjEsNyBAQCBpZCBjcmVhdGVKU1dyYXBwZXIoSlNDOjpKU09iamVjdCogb2JqZWN0CiAgICAgcmV0
dXJuIFtbW1dlYlNjcmlwdE9iamVjdCBhbGxvY10gX2luaXRXaXRoSlNPYmplY3Q6b2JqZWN0IG9y
aWdpblJvb3RPYmplY3Q6b3JpZ2luIHJvb3RPYmplY3Q6cm9vdF0gYXV0b3JlbGVhc2VdOwogfQog
Ci1zdGF0aWMgdm9pZCBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoRXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTVmFsdWUmIGV4Y2VwdGlvbikKK3N0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShF
eGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAgICAgSlNET01X
aW5kb3cqIHdpbmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgp
KTsKICAgICBpZiAoIXdpbmRvdyB8fCAhZXhjZXB0aW9uKQpAQCAtMTMxLDcgKzEzMSw3IEBAIHN0
YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShFeGVjU3QKIAogc3RhdGljIHZvaWQgYWRk
RXhjZXB0aW9uVG9Db25zb2xlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0M6OkpTVmFsdWUg
ZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2Vw
dGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CkBAIC0zNDIsOCAr
MzQyLDggQEAgLSAoaWQpY2FsbFdlYlNjcmlwdE1ldGhvZDooTlNTdHJpbmcgKiluYQogICAgIGlm
ICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBKU0M6
OkpTVmFsdWUgZXhjZXB0aW9uOwotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBKU01haW5UaHJl
YWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgW3Nl
bGYgX2ltcF0sIGFyZ0xpc3QsICZleGNlcHRpb24pOworICAgIEpTQzo6RXhjZXB0aW9uKiBleGNl
cHRpb247CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6
Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBbc2VsZiBfaW1wXSwgYXJn
TGlzdCwgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgYWRkRXhj
ZXB0aW9uVG9Db25zb2xlKGV4ZWMsIGV4Y2VwdGlvbik7CkBAIC0zNjYsNyArMzY2LDcgQEAgLSAo
aWQpZXZhbHVhdGVXZWJTY3JpcHQ6KE5TU3RyaW5nICopc2NyaQogCiAgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgCi0gICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQp
KSwgSlNDOjpKU1ZhbHVlKCksIDApOworICAgIEpTQzo6SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpT
TWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywgbWFrZVNvdXJjZShTdHJpbmcoc2Ny
aXB0KSksIEpTQzo6SlNWYWx1ZSgpKTsKIAogICAgIGlkIHJlc3VsdE9iaiA9IFtXZWJTY3JpcHRP
YmplY3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJldHVyblZhbHVlIG9yaWdpblJvb3RPYmpl
Y3Q6W3NlbGYgX29yaWdpblJvb3RPYmplY3RdIHJvb3RPYmplY3Q6W3NlbGYgX3Jvb3RPYmplY3Rd
XTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2Ny
aXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3
LDcgKzEzNyw3IEBAIGJvb2wgUGFnZVNjcmlwdERlYnVnU2VydmVyOjppc0NvbnRlbnRTY3IKICAg
ICByZXR1cm4gJmN1cnJlbnRXb3JsZChleGVjKSAhPSAmbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7
CiB9CiAKLXZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZXBvcnRFeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvbikgY29uc3QKK3ZvaWQgUGFnZVNjcmlwdERlYnVn
U2VydmVyOjpyZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIGV4Y2Vw
dGlvbikgY29uc3QKIHsKICAgICBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0
aW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdT
ZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlw
dERlYnVnU2VydmVyLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZShKU0M6OkpTR2xvYmFs
T2JqZWN0Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHJ1bkV2ZW50TG9vcFdoaWxlUGF1
c2VkKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudFNjcmlwdChKU0M6OkV4
ZWNTdGF0ZSopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRp
b24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlv
biopIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBydW5FdmVudExvb3BXaGlsZVBhdXNlZElu
dGVybmFsKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2Nv
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFs
U2NvcGUuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDkgKzE5Nyw5IEBAIHZv
aWQgV29ya2VyR2xvYmFsU2NvcGU6OmltcG9ydFNjcmlwdHMoY28KIAogICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnNjcmlwdEltcG9ydGVkKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSwgc2NyaXB0TG9hZGVyLT5pZGVudGlmaWVyKCksIHNjcmlwdExvYWRlci0+c2NyaXB0KCkpOwog
Ci0gICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGV4Y2VwdGlvbjsKLSAgICAgICAgbV9z
Y3JpcHQtPmV2YWx1YXRlKFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSwg
c2NyaXB0TG9hZGVyLT5yZXNwb25zZVVSTCgpKSwgJmV4Y2VwdGlvbik7Ci0gICAgICAgIGlmICgh
ZXhjZXB0aW9uLmhhc05vVmFsdWUoKSkgeworICAgICAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0
aW9uOworICAgICAgICBtX3NjcmlwdC0+ZXZhbHVhdGUoU2NyaXB0U291cmNlQ29kZShzY3JpcHRM
b2FkZXItPnNjcmlwdCgpLCBzY3JpcHRMb2FkZXItPnJlc3BvbnNlVVJMKCkpLCBleGNlcHRpb24p
OworICAgICAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAgICAgICAgICBtX3NjcmlwdC0+c2V0RXhj
ZXB0aW9uKGV4Y2VwdGlvbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0V4Y2Vw
dGlvbi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvQXBwbGljYXRpb25DYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UuaD4KQEAgLTUyMiw3ICs1MjMsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpy
ZXBvcnRFeGNlcHRpb24oSlNDCiAgICAgaWYgKCF0b0pTRE9NV2luZG93KGV4ZWNTdGF0ZS0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViQ29yZTo6cmVw
b3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgdG9KUyhleGVjU3RhdGUsIGV4Y2VwdGlvbikpOworICAg
IFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbihleGVjU3RhdGUsIEV4Y2VwdGlvbjo6Y2FzdCh0b0pT
KGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRD
cmVhdGVQYWdlKFdlYlBhZ2UqIHBhZ2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsNyBAQAogI2ltcG9ydCA8Q29y
ZUZvdW5kYXRpb24vQ0ZTZXQuaD4KICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxDb25uZWN0aW9u
Lmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9FeGNlcHRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYu
aD4KICNpbXBvcnQgPFdlYkNvcmUvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0FuaW1hdGlvbkNvbnRyb2xsZXIuaD4KQEAgLTcyNCw3ICs3MjUsOCBAQCAr
ICh2b2lkKV9yZXBvcnRFeGNlcHRpb246KEpTVmFsdWVSZWYpZXhjCiAgICAgaWYgKCF0b0pTRE9N
V2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgdG9KUyhleGVjU3RhdGUsIGV4Y2Vw
dGlvbikpOworICAgIEV4Y2VwdGlvbiogdm1FeGNlcHRpb24gPSBFeGNlcHRpb246OmNhc3QodG9K
UyhleGVjU3RhdGUsIGV4Y2VwdGlvbikpOworICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjU3RhdGUs
IHZtRXhjZXB0aW9uKTsKIH0KIAogc3RhdGljIHZvaWQgV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0
aW9uQ2FjaGVQYXRoSWZOZWNlc3NhcnkoKQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVn
cmVzcy0xMzE1MzAtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
ZG9tL3JlZ3Jlc3MtMTMxNTMwLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTg1MTEwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9kb20vcmVncmVzcy0xMzE1MzAtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogQ09OU09MRSBNRVNTQUdFOiBsaW5lIDU6IEV4Y2VwdGlvbiB0
byB0cmlnZ2VyIHVud2luZGluZyBpbiBNdXRhdGlvbk9ic2VydmVyCi1DT05TT0xFIE1FU1NBR0U6
IFBlbmRpbmcgZXhjZXB0aW9uIGJlZm9yZSBNdXRhdGlvbk9ic2VydmVycyBhcmUgY2FsbGVkLgor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDIyOiBQZW5kaW5nIGV4Y2VwdGlvbiBiZWZvcmUgTXV0YXRp
b25PYnNlcnZlcnMgYXJlIGNhbGxlZC4KIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cHM6Ly93ZWJr
aXQub3JnL2IvMTMxNTMwLiBUaGlzIHRlc3Qgc2hvdWxkIG5vdCBjcmFzaC4KIAogTXV0YXRlIHRo
YXQgbm9kZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254192</attachid>
            <date>2015-06-03 12:21:04 -0700</date>
            <delta_ts>2015-06-03 20:19:26 -0700</delta_ts>
            <desc>patch 5: +Windows fix, +test</desc>
            <filename>wip-exception5.patch</filename>
            <type>text/plain</type>
            <size>151890</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4NTExMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDU0LDYgKzQ1NCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAg
ICBydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5jcHAKICAgICBydW50aW1lL0Vycm9ySW5zdGFu
Y2UuY3BwCiAgICAgcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKKyAgICBydW50aW1lL0V4Y2Vw
dGlvbi5jcHAKICAgICBydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCiAgICAgcnVudGltZS9FeGNl
cHRpb25IZWxwZXJzLmNwcAogICAgIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNvbXBs
ZXRpb24uaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJEaXNh
c3NlbWJsZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFeGNlcHRpb25I
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJJbml0aWFs
aXplVGhyZWFkaW5nLmgiCkBAIC04OTksMTMgKzkwMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoCiAgICAg
ICAgIGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksICJhcmd1bWVudHMiKSwgYXJyYXkpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRpb247
CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKICAg
ICBzdG9wV2F0Y2guc3RhcnQoKTsKLSAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSwganNjU291cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXhj
ZXB0aW9uKTsKKyAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291
cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCBleGNlcHRpb24pOwogICAg
IHN0b3BXYXRjaC5zdG9wKCk7CiAKLSAgICBpZiAoISFleGNlcHRpb24pIHsKKyAgICBpZiAoZXhj
ZXB0aW9uKSB7CiAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpAQCAtOTIyLDggKzkyMyw4IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2EKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgCi0gICAgSlNWYWx1
ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFt
ZSksIEpTVmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEV4Y2VwdGlvbiogZXZh
bHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBK
U1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIGlmIChldmFsdWF0aW9uRXhjZXB0
aW9uKQogICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV2YWx1YXRpb25F
eGNlcHRpb24pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTEyODUs
MTUgKzEyODYsMTUgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0Kgog
CiAgICAgICAgIHZtLnN0YXJ0U2FtcGxpbmcoKTsKIAotICAgICAgICBKU1ZhbHVlIGV2YWx1YXRp
b25FeGNlcHRpb247Ci0gICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdCwgZmlsZU5hbWUpLCBKU1Zh
bHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgRXhjZXB0aW9uKiBldmFsdWF0
aW9uRXhjZXB0aW9uOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZpbGVOYW1lKSwgSlNW
YWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3Mg
JiYgIWV2YWx1YXRpb25FeGNlcHRpb247CiAgICAgICAgIGlmIChkdW1wICYmICFldmFsdWF0aW9u
RXhjZXB0aW9uKQogICAgICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50
b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNl
cHRpb24pIHsKLSAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlv
bkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHBy
aW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0
cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIElkZW50aWZpZXIgc3RhY2tJ
RCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksICJz
dGFjayIpOwotICAgICAgICAgICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXZhbHVhdGlvbkV4Y2Vw
dGlvbi5nZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOworICAgICAgICAg
ICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS5nZXQo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOwogICAgICAgICAgICAgaWYgKCFz
dGFja1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIl
c1xuIiwgc3RhY2tWYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZh
bHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
fQpAQCAtMTM0OSw4ICsxMzUwLDggQEAgc3RhdGljIHZvaWQgcnVuSW50ZXJhY3RpdmUoR2xvYmFs
T2JqZWN0KgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBl
dmFsdWF0aW9uRXhjZXB0aW9uOwotICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVh
dGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc291cmNlLCBpbnRlcnBy
ZXRlck5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgRXhj
ZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVl
ID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc291cmNl
LCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogI2Vs
c2UKICAgICAgICAgcHJpbnRmKCIlcyIsIGludGVyYWN0aXZlUHJvbXB0KTsKICAgICAgICAgVmVj
dG9yPGNoYXIsIDI1Nj4gbGluZTsKQEAgLTEzNjUsMTEgKzEzNjYsMTEgQEAgc3RhdGljIHZvaWQg
cnVuSW50ZXJhY3RpdmUoR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGxpbmUuYXBwZW5kKCdcMCcpOwogCi0gICAgICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKLSAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2UobGluZS5kYXRhKCksIGludGVycHJldGVyTmFtZSksIEpT
VmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgICAgICBFeGNlcHRpb24qIGV2YWx1
YXRpb25FeGNlcHRpb247CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKGxpbmUuZGF0YSgpLCBpbnRlcnBy
ZXRlck5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogI2VuZGlmCiAgICAg
ICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQotICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRp
b246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhj
ZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFs
dWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
KS51dGY4KCkuZGF0YSgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNw
cAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQVBJQ2FzdC5o
IgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNs
dWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNs
dWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIK
QEAgLTYzLDEyICs2NCwxMiBAQCBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0
UmVmCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKTsKICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT5z
dHJpbmcoKSwgc291cmNlVVJMID8gc291cmNlVVJMLT5zdHJpbmcoKSA6IFN0cmluZygpLCBUZXh0
UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHN0YXJ0aW5nTGluZU51bWJl
ciksIE9yZGluYWxOdW1iZXI6OmZpcnN0KCkpKTsKIAotICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4
Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIHNvdXJjZSwganNUaGlzT2JqZWN0LCAmZXZhbHVhdGlvbkV4Y2VwdGlv
bik7CisgICAgRXhjZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmV0
dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc291cmNlLCBq
c1RoaXNPYmplY3QsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogCiAgICAgaWYgKGV2YWx1YXRpb25F
eGNlcHRpb24pIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRp
b24gPSB0b1JlZihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgICAgICpleGNl
cHRpb24gPSB0b1JlZihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1ZSgpKTsKICNpZiBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKICAgICAgICAgLy8gRklYTUU6IElmIHdlIGhhdmUgYSBk
ZWJ1Z2dlciBhdHRhY2hlZCB3ZSBjb3VsZCBsZWFybiBhYm91dCBQYXJzZUVycm9yIGV4Y2VwdGlv
bnMgdGhyb3VnaAogICAgICAgICAvLyBTY3JpcHREZWJ1Z1NlcnZlcjo6c291cmNlUGFyc2VkIGFu
ZCB0aGlzIHBhdGggY291bGQgcHJvZHVjZSBhIGR1cGxpY2F0ZSB3YXJuaW5nLiBUaGUKQEAgLTEw
Nyw3ICsxMDgsOCBAQCBib29sIEpTQ2hlY2tTY3JpcHRTeW50YXgoSlNDb250ZXh0UmVmIGN0CiAg
ICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhl
Yywgc3ludGF4RXhjZXB0aW9uKTsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAg
ICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVw
b3J0QVBJRXhjZXB0aW9uKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CisgICAgICAgIEV4Y2VwdGlv
biogZXhjZXB0aW9uID0gRXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgc3ludGF4RXhjZXB0
aW9uKTsKKyAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiAjZW5kaWYKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QAogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRhdGVDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSWRlbnRp
Zmllci5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKQEAgLTYxLDYgKzYyLDIx
IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKK3N0YXRpYyBib29sIGhhbmRsZUV4Y2VwdGlv
bklmTmVlZGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVJlZiogcmV0dXJuZWRFeGNlcHRpb25S
ZWYpCit7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEV4Y2VwdGlv
biogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIGlmIChyZXR1cm5lZEV4
Y2VwdGlvblJlZikKKyAgICAgICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvblJlZiA9IHRvUmVmKGV4
ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgICAgIGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVj
LCBleGNlcHRpb24pOworI2VuZGlmCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIEpTQ2xhc3NSZWYgSlNDbGFzc0NyZWF0ZShjb25zdCBKU0NsYXNz
RGVmaW5pdGlvbiogZGVmaW5pdGlvbikKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CkBA
IC0xNDgsMTYgKzE2NCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUZ1bmN0aW9uKEpTQ29u
dGUKICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhleGVjLCBib2R5LT5zdHJpbmcoKSkpOwogCiAg
ICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgYXJncywgbmFtZUlELCBzb3VyY2VVUkwgPyBzb3VyY2VVUkwtPnN0
cmluZygpIDogU3RyaW5nKCksIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFz
ZWRJbnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcjo6Zmlyc3QoKSkpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAg
ICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAg
ICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5y
ZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYg
KGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3Vs
dCA9IDA7Ci0gICAgfQogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQogCkBAIC0xODAsMTYg
KzE4OCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUFycmF5KEpTQ29udGV4dFIKICAgICB9
IGVsc2UKICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKIAot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAg
ICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQot
ICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAg
aWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJl
c3VsdCA9IDA7Ci0gICAgfQogCiAgICAgcmV0dXJuIHRvUmVmKHJlc3VsdCk7CiB9CkBAIC0yMDgs
MTYgKzIwOCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZURhdGUoSlNDb250ZXh0UmUKICAg
ICAgICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBhcmd1bWVudHNbaV0pKTsKIAogICAgIEpT
T2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3REYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgYXJnTGlzdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAg
aWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGNl
cHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25W
YWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywgZXhj
ZXB0aW9uKSkKICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICB9CiAKICAgICByZXR1cm4gdG9SZWYo
cmVzdWx0KTsKIH0KQEAgLTIzNSwxNiArMjI3LDggQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtl
RXJyb3IoSlNDb250ZXh0UgogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCk7CiAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2Fn
ZSk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9u
KQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsK
LSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRp
ZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAg
ICAgICByZXN1bHQgPSAwOwotICAgIH0KIAogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQpA
QCAtMjYzLDE2ICsyNDcsOCBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VSZWdFeHAoSlNDb250
ZXh0CiAgICAgICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgYXJndW1lbnRzW2ldKSk7CiAK
ICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0UmVnRXhwKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgIGFyZ0xpc3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7
Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYo
ZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwot
I2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFs
T2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywg
ZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVk
KGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQogICAgIAogICAg
IHJldHVybiB0b1JlZihyZXN1bHQpOwogfQpAQCAtMzM5LDE1ICszMTUsNyBAQCBKU1ZhbHVlUmVm
IEpTT2JqZWN0R2V0UHJvcGVydHkoSlNDb250ZXh0CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0g
dG9KUyhvYmplY3QpOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNPYmplY3QtPmdldChleGVj
LCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMt
PmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2Vw
dGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+
dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhj
ZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0KKyAgICBoYW5kbGVF
eGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVybiB0b1JlZihleGVj
LCBqc1ZhbHVlKTsKIH0KIApAQCAtMzcyLDE1ICszNDAsNyBAQCB2b2lkIEpTT2JqZWN0U2V0UHJv
cGVydHkoSlNDb250ZXh0UmVmIGN0CiAgICAgICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5w
dXQoanNPYmplY3QsIGV4ZWMsIG5hbWUsIGpzVmFsdWUsIHNsb3QpOwogICAgIH0KIAotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAg
ICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBv
cnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAg
IGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CiAKIEpTVmFsdWVS
ZWYgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RS
ZWYgb2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CkBAIC0zOTUsMTUgKzM1NSw3IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5k
ZXgoSlMKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAKICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSBqc09iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5SW5kZXgpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAg
ICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBv
cnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAg
IGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIHRv
UmVmKGV4ZWMsIGpzVmFsdWUpOwogfQogCkBAIC00MjEsMTUgKzM3Myw3IEBAIHZvaWQgSlNPYmpl
Y3RTZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXgKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pT
KGV4ZWMsIHZhbHVlKTsKICAgICAKICAgICBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJ
bmRleChqc09iamVjdCwgZXhlYywgcHJvcGVydHlJbmRleCwganNWYWx1ZSwgZmFsc2UpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAg
ICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAg
ICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5y
ZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQor
ICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CiAKIGJvb2wg
SlNPYmplY3REZWxldGVQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmpl
Y3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAt
NDQ0LDE1ICszODgsNyBAQCBib29sIEpTT2JqZWN0RGVsZXRlUHJvcGVydHkoSlNDb250ZXh0UmVm
CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCiAgICAgYm9vbCByZXN1
bHQgPSBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoanNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhl
Yy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhj
ZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVj
LT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElF
eGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAgIGhhbmRs
ZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtNjE2LDE2ICs1NTIsOCBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0Q2FsbEFzRnVuY3Rp
b24oSlNDb250CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSB0
b1JlZihleGVjLCBjYWxsKGV4ZWMsIGpzT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVGhp
c09iamVjdCwgYXJnTGlzdCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAg
ICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAg
IGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhj
ZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
VmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4
Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTY1NywxNiArNTg1LDggQEAgSlNPYmplY3RSZWYgSlNPYmplY3RDYWxsQXNDb25z
dHJ1Y3RvcihKUwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgaSsr
KQogICAgICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGFyZ3VtZW50c1tpXSkpOwogICAg
IEpTT2JqZWN0UmVmIHJlc3VsdCA9IHRvUmVmKGNvbnN0cnVjdChleGVjLCBqc09iamVjdCwgY29u
c3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJnTGlzdCkpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhj
ZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVu
dHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRp
b24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlv
bklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHRSZWYuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
CiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiVk0u
aCIKICNpbmNsdWRlICJKU1NjcmlwdFJlZlByaXZhdGUuaCIKQEAgLTE0MiwxMiArMTQzLDEyIEBA
IEpTVmFsdWVSZWYgSlNTY3JpcHRFdmFsdWF0ZShKU0NvbnRleHRSZWYKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIEpT
VmFsdWUgaW50ZXJuYWxFeGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBpbnRlcm5hbEV4Y2VwdGlv
bjsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHRoaXNWYWx1ZVJlZiA/IHRvSlMoZXhlYywgdGhp
c1ZhbHVlUmVmKSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0
ZShleGVjLCBTb3VyY2VDb2RlKHNjcmlwdCksIHRoaXNWYWx1ZSwgJmludGVybmFsRXhjZXB0aW9u
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGV4ZWMsIFNvdXJjZUNvZGUoc2NyaXB0
KSwgdGhpc1ZhbHVlLCBpbnRlcm5hbEV4Y2VwdGlvbik7CiAgICAgaWYgKGludGVybmFsRXhjZXB0
aW9uKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0g
dG9SZWYoZXhlYywgaW50ZXJuYWxFeGNlcHRpb24pOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IHRvUmVmKGV4ZWMsIGludGVybmFsRXhjZXB0aW9uLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIEFTU0VSVChyZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1ZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWYWx1ZS5tbQkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZhbHVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW1wb3J0
ICJBUElDYXN0LmgiCiAjaW1wb3J0ICJEYXRlSW5zdGFuY2UuaCIKICNpbXBvcnQgIkVycm9yLmgi
CisjaW1wb3J0ICJFeGNlcHRpb24uaCIKICNpbXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCiAjaW1w
b3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZUludGVy
bmFsLmgiCkBAIC02NDUsOSArNjQ2LDEwIEBAIEpTQ29udGFpbmVyQ29udmVydG9yOjpUYXNrIEpT
Q29udGFpbmVyQ28KIH0KIAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotc3RhdGljIHZv
aWQgcmVwb3J0RXhjZXB0aW9uVG9JbnNwZWN0b3IoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQs
IEpTQzo6SlNWYWx1ZSBleGNlcHRpb24pCitzdGF0aWMgdm9pZCByZXBvcnRFeGNlcHRpb25Ub0lu
c3BlY3RvcihKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlKQogewogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAg
ICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246OmNyZWF0ZShleGVj
LT52bSgpLCBleGNlcHRpb25WYWx1ZSk7CiAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bik7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJl
Zi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVm
LmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Zh
bHVlUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAi
QVBJQ2FzdC5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bi5oIgogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCkBAIC01Miw2ICs1MywyMSBAQAogCiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCitzdGF0aWMgYm9vbCBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVSZWYqIHJldHVybmVkRXhjZXB0aW9uUmVmKQoreworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlv
biA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb25SZWYp
CisgICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb25SZWYgPSB0b1JlZihleGVjLCBleGNlcHRp
b24tPnZhbHVlKCkpOworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQorICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
KTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCiAjaWYgUExBVEZPUk0oTUFDKQogc3RhdGljIGJvb2wgZXZlcm5vdGVIYWNrTmVlZGVk
KCkKIHsKQEAgLTIyNCwxNSArMjQwLDggQEAgYm9vbCBKU1ZhbHVlSXNFcXVhbChKU0NvbnRleHRS
ZWYgY3R4LCBKUwogICAgIEpTVmFsdWUganNCID0gdG9KUyhleGVjLCBiKTsKIAogICAgIGJvb2wg
cmVzdWx0ID0gSlNWYWx1ZTo6ZXF1YWwoZXhlYywganNBLCBqc0IpOyAvLyBmYWxzZSBpZiBhbiBl
eGNlcHRpb24gaXMgdGhyb3duCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAg
aWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGNl
cHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25W
YWx1ZSk7Ci0jZW5kaWYKLSAgICB9CisgICAgaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywg
ZXhjZXB0aW9uKTsKKyAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNjYsMTUgKzI3
NSw3IEBAIGJvb2wgSlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0cnVjdG9yKEpTQ28KICAgICBpZiAo
IWpzQ29uc3RydWN0b3ItPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmltcGxlbWVudHNIYXNJbnN0
YW5jZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCByZXN1bHQgPSBqc0NvbnN0
cnVjdG9yLT5oYXNJbnN0YW5jZShleGVjLCBqc1ZhbHVlKTsgLy8gZmFsc2UgaWYgYW4gZXhjZXB0
aW9uIGlzIHRocm93bgotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBK
U1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChl
eGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9u
VmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUp
OwotI2VuZGlmCi0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2Vw
dGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzY4LDE2ICszNjksOCBAQCBKU1N0
cmluZ1JlZiBKU1ZhbHVlQ3JlYXRlSlNPTlN0cmluZyhKU0NvCiAgICAgU3RyaW5nIHJlc3VsdCA9
IEpTT05TdHJpbmdpZnkoZXhlYywgdmFsdWUsIGluZGVudCk7CiAgICAgaWYgKGV4Y2VwdGlvbikK
ICAgICAgICAgKmV4Y2VwdGlvbiA9IDA7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVj
LCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmpl
Y3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNl
cHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhl
YywgZXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogICAgIHJldHVybiBPcGFx
dWVKU1N0cmluZzo6Y3JlYXRlKHJlc3VsdCkubGVha1JlZigpOwogfQogCkBAIC00MDYsMTYgKzM5
OSw4IEBAIGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0eCwKICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKIAogICAgIGRvdWJsZSBudW1iZXIgPSBq
c1ZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewot
ICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAg
ICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywg
ZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVO
QUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0
aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMs
IGV4Y2VwdGlvbikpCiAgICAgICAgIG51bWJlciA9IFBOYU47Ci0gICAgfQogICAgIHJldHVybiBu
dW1iZXI7CiB9CiAKQEAgLTQzMSwxNiArNDE2LDggQEAgSlNTdHJpbmdSZWYgSlNWYWx1ZVRvU3Ry
aW5nQ29weShKU0NvbnRleAogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUp
OwogICAgIAogICAgIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gc3RyaW5nUmVmKE9wYXF1ZUpTU3Ry
aW5nOjpjcmVhdGUoanNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1
ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAg
ICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAg
ICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVw
b3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgorICAgIGlmICho
YW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAgICAgICBzdHJpbmdS
ZWYuY2xlYXIoKTsKLSAgICB9CiAgICAgcmV0dXJuIHN0cmluZ1JlZi5yZWxlYXNlKCkubGVha1Jl
ZigpOwogfQogCkBAIC00NTYsMTYgKzQzMyw4IEBAIEpTT2JqZWN0UmVmIEpTVmFsdWVUb09iamVj
dChKU0NvbnRleHRSZWYKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsK
ICAgICAKICAgICBKU09iamVjdFJlZiBvYmplY3RSZWYgPSB0b1JlZihqc1ZhbHVlLnRvT2JqZWN0
KGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1
ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0
aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVl
KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNl
bmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQog
ICAgICAgICBvYmplY3RSZWYgPSAwOwotICAgIH0KICAgICByZXR1cm4gb2JqZWN0UmVmOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4
NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcxMiw2ICs3MTIsNyBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJvckhhbmRsaW5nU2NvcGUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJvckluc3RhbmNlLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JQcm90b3R5cGUu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb24uY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb25GdXp6LmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uSGVscGVy
cy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4ZWN1dGFibGUu
Y3BwIiAvPgpAQCAtMTUwMyw2ICsxNTA0LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcRXJyb3JIYW5kbGluZ1Njb3BlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXEVycm9ySW5zdGFuY2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcRXJyb3JQcm90b3R5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEV4Y2VwdGlvbkZ1enouaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcRXhjZXB0aW9uSGVscGVycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxFeGVjdXRhYmxlLmgiIC8+CkBAIC0xODI3LDQgKzE4MjksNCBAQAogICA8SW1wb3J0
R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChW
Q1RhcmdldHNQYXRoKVxCdWlsZEN1c3RvbWl6YXRpb25zXG1hc20udGFyZ2V0cyIgLz4KICAgPC9J
bXBvcnRHcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1By
b2plY3Q+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ai5maWx0ZXJzCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtp
bmcgY29weSkKQEAgLTE2OTgsNiArMTY5OCw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHVmFsdWVTdHJlbmd0aC5jcHAiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4K
ICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhj
ZXB0aW9uLmNwcCI+CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsQ29t
cGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uRnV6ei5j
cHAiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBA
IC00MTkwLDYgKzQxOTMsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Zh
bHVlU3RyZW5ndGguaCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb24uaCI+Cisg
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uRnV6ei5oIj4KICAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtNDQ4NSw0ICs0NDkxLDQg
QEAKICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9NQVNNPgogICA8L0l0ZW1Hcm91
cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg1MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTE2NjAsNiArMTY2MCw4IEBACiAJCUU0OURDMTZEMTJFRjI5
NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNDkxMkVGMjYxQTAwMTg0QTFGIC8q
IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRBMDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlv
blRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuY3BwICovOyB9OwogCQlGRTBENEEwOTFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4
dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFMEQ0QTA3MUFCQTI0MzcwMDJGNTRCRiAvKiBHbG9iYWxDb250ZXh0V2l0
aEZpbmFsaXplclRlc3QuY3BwICovOyB9OworCQlGRTFDMEZGRDFCMTkzRTk4MDBCNTNGQ0EgLyog
RXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUxQzBGRkYxQjE5NEZEMTAwQjUz
RkNBIC8qIEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0aW9uLmNwcCAqLzsg
fTsKIAkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUIxNUYwNEE5NTAw
REYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovOyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTM4NEVFNTFBRERC
N0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NEVFMTFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJW
TS5jcHAgKi87IH07CkBAIC0zNDYzLDYgKzM0NjUsOCBAQAogCQlGRTBENEEwNTFBQjhERDBBMDAy
RjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBFeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvRXhl
Y3V0aW9uVGltZUxpbWl0VGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTBE
NEEwNzFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEdsb2JhbENvbnRleHRXaXRo
RmluYWxpemVyVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvR2xvYmFsQ29udGV4dFdpdGhGaW5h
bGl6ZXJUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDgxQUJB
MjQzNzAwMkY1NEJGIC8qIEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3Qu
aDsgcGF0aCA9IEFQSS90ZXN0cy9HbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4
Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxQzBGRkUxQjE5NEZEMTAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNl
cHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1
MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJ
bnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7
IHBhdGggPSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFMzg0RUUxMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9sbGFyVk0uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDQyNyw2ICs0NDMxLDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAw
RjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5
NyAvKiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3
IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCisJCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5oICovLAorCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRp
b24uY3BwICovLAogCQkJCTBGMTJERTBEMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6
LmNwcCAqLywKIAkJCQkwRjEyREUwRTE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5o
ICovLAogCQkJCTE0MjlEODc3MEVEMjFBQ0QwMEI4OTYxOSAvKiBFeGNlcHRpb25IZWxwZXJzLmNw
cCAqLywKQEAgLTU2MjQsNiArNTYzMCw3IEBACiAJCQkJRkU0RDU1QjgxQUU3MTZDQTAwNTJFNDU5
IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1MDY4NjUxQUUyNDYz
OTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzQ0
MkNCMjUxQTZDREI4QzAwNUQzRDdDIC8qIEpTSW5wdXRzLmpzb24gaW4gSGVhZGVycyAqLywKKwkJ
CQlGRTFDMEZGRDFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tM
b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcxMEUxOUY2REY4MTAwOThGNUVDIC8q
IEluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIGluIEhlYWRlcnMgKi8sCkBA
IC03NDA4LDYgKzc0MTUsNyBAQAogCQkJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1By
b21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENEMjE4NkY4QTkzMDA5
NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0
RTFFMTdCRUUyMkUwMDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkUxQzBGRkYxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3MDlGQjg2QjFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENERTE4NzEyNThEMDA5NTVDMjQgLyogSlNQ
cm9taXNlUmVhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAw
OUYxN0QwIC8qIEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1
bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMywxMSArMTMzLDExIEBAIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2EKICAgICAgICAgcmV0dXJuIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlKCk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICBKU1ZhbHVl
IGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICBpZiAobV9jYWxsSGFu
ZGxlcikKLSAgICAgICAgcmVzdWx0ID0gbV9jYWxsSGFuZGxlcihtX2V4ZWMsIGZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIG1fYXJndW1lbnRzLCAmZXhjZXB0aW9uKTsK
KyAgICAgICAgcmVzdWx0ID0gbV9jYWxsSGFuZGxlcihtX2V4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIG1fYXJndW1lbnRzLCBleGNlcHRpb24pOwogICAgIGVs
c2UKLSAgICAgICAgcmVzdWx0ID0gSlNDOjpjYWxsKG1fZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBl
LCBjYWxsRGF0YSwgdGhpc09iamVjdCwgbV9hcmd1bWVudHMsICZleGNlcHRpb24pOworICAgICAg
ICByZXN1bHQgPSBKU0M6OmNhbGwobV9leGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCB0aGlzT2JqZWN0LCBtX2FyZ3VtZW50cywgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRp
b24pIHsKICAgICAgICAgaGFkRXhjZXB0aW9uID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmgJKHJldmlzaW9u
IDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlv
bkNhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogCiBjbGFz
cyBKU19FWFBPUlRfUFJJVkFURSBTY3JpcHRGdW5jdGlvbkNhbGwgOiBwdWJsaWMgU2NyaXB0Q2Fs
bEFyZ3VtZW50SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTVmFsdWUgKCpT
Y3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1Zh
bHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNh
bGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdM
aXN0JiBhcmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbik7CisgICAgdHlwZWRlZiBKU0M6OkpT
VmFsdWUgKCpTY3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25z
dCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3Qg
SlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkV4Y2VwdGlvbiomIGV4Y2VwdGlvbik7CiAgICAgU2Ny
aXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBTY3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyIGhhbmRsZXIgPSBudWxscHRyKTsK
ICAgICBTY3JpcHRWYWx1ZSBjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbik7CiAgICAgU2NyaXB0VmFs
dWUgY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyAr
MTEzLDcgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1c2hfd2l0aF9zY29wZSIsICJs
ZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcG9wX3Njb3BlIiwgImxl
bmd0aCIgOiAyIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXNoX25hbWVfc2NvcGUi
LCAibGVuZ3RoIiA6IDUgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NhdGNoIiwgImxl
bmd0aCIgOiAyIH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYXRjaCIsICJsZW5ndGgi
IDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdGhyb3ciLCAibGVuZ3RoIiA6IDIg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Rocm93X3N0YXRpY19lcnJvciIsICJsZW5n
dGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVidWciLCAibGVuZ3RoIiA6
IDMgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZVVzZURlZi5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcgKzMwMyw2IEBA
IHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2RlQmwKICAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGU6CiAgICAgY2FzZSBvcF9zdHJjYXQ6CiAgICAgY2FzZSBvcF90b19wcmltaXRp
dmU6Ci0gICAgY2FzZSBvcF9jYXRjaDoKICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgogICAgIGNh
c2Ugb3BfbmV3X2FycmF5OgogICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKQEAgLTM3NCw2
ICszNzMsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAg
ICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBvcF9jYXRj
aDoKICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OiB7CiAgICAgICAgIGZ1
bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCk7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2Rl
SUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0ODQsNyArMTQ4NCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBvcF9jYXRjaDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJh
bmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYXRjaCIsIHIwKTsKKyAgICAgICAgICAgIGlu
dCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2F0Y2giKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRh
dGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3Ro
cm93OiB7CkBAIC0yODc4LDcgKzI4ODAsNyBAQCBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVk
UmVwbGFjZW1lbnQoCiB9CiAjZW5kaWYKIAotSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxl
ckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorSGFuZGxlckluZm8q
IENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0LCBib29sIHJlcXVpcmVDYXRjaEhhbmRsZXIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYnl0
ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogCkBAIC0yODg4LDYgKzI4OTAs
OSBAQCBIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvCiAgICAgVmVjdG9y
PEhhbmRsZXJJbmZvPiYgZXhjZXB0aW9uSGFuZGxlcnMgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhjZXB0aW9uSGFuZGxlcnMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25I
YW5kbGVyc1tpXTsKKyAgICAgICAgaWYgKHJlcXVpcmVDYXRjaEhhbmRsZXIgJiYgIWhhbmRsZXIu
aXNDYXRjaEhhbmRsZXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIC8vIEhh
bmRsZXJzIGFyZSBvcmRlcmVkIGlubmVybW9zdCBmaXJzdCwgc28gdGhlIGZpcnN0IGhhbmRsZXIg
d2UgZW5jb3VudGVyCiAgICAgICAgIC8vIHRoYXQgY29udGFpbnMgdGhlIHNvdXJjZSBhZGRyZXNz
IGlzIHRoZSBjb3JyZWN0IGhhbmRsZXIgdG8gdXNlLgogICAgICAgICBpZiAoaGFuZGxlci5zdGFy
dCA8PSBieXRlY29kZU9mZnNldCAmJiBoYW5kbGVyLmVuZCA+IGJ5dGVjb2RlT2Zmc2V0KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODUsNyArMTg1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
aW5kZXggPj0gbV9udW1WYXJzOwogICAgIH0KIAotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9y
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEhhbmRsZXJJbmZv
KiBoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGJvb2wg
cmVxdWlyZUNhdGNoSGFuZGxlciA9IGZhbHNlKTsKICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyRm9y
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogICAgIHVuc2lnbmVkIGNv
bHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKICAg
ICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0LCBpbnQmIGRpdm90LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0hhbmRsZXJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0hhbmRsZXJJbmZvLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIGVudW0gY2xhc3MgSGFuZGxlclR5cGUgewogc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7CiAg
ICAgSGFuZGxlclR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEhhbmRsZXJU
eXBlPih0eXBlQml0cyk7IH0KICAgICB2b2lkIHNldFR5cGUoSGFuZGxlclR5cGUgdHlwZSkgeyB0
eXBlQml0cyA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKTsgfQotICAgIAorCiAgICAgY29u
c3QgY2hhciogdHlwZU5hbWUoKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKQEAg
LTU1LDkgKzU1LDkgQEAgc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIAorCiAgICAgYm9vbCBpc0NhdGNoSGFuZGxl
cigpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBIYW5kbGVyVHlwZTo6Q2F0Y2g7IH0KLSAgICAK
KwogICAgIHVpbnQzMl90IHN0YXJ0OwogICAgIHVpbnQzMl90IGVuZDsKICAgICB1aW50MzJfdCB0
YXJnZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1MjgsNyArMjUyOCw3IEBAIFRyeURhdGEqIEJ5dGVjb2RlR2VuZXJhdG9y
OjpwdXNoVHJ5KExhYmUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kRW1pdENhdGNoKFRyeURhdGEqIHRyeURhdGEsIFJlZ2lz
dGVySUQqIHRhcmdldFJlZ2lzdGVyLCBMYWJlbCogZW5kLCBIYW5kbGVyVHlwZSBoYW5kbGVyVHlw
ZSkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFRyeUFuZEVtaXRDYXRjaChUcnlEYXRhKiB0
cnlEYXRhLCBSZWdpc3RlcklEKiBleGNlcHRpb25SZWdpc3RlciwgUmVnaXN0ZXJJRCogdGhyb3du
VmFsdWVSZWdpc3RlciwgTGFiZWwqIGVuZCwgSGFuZGxlclR5cGUgaGFuZGxlclR5cGUpCiB7CiAg
ICAgbV91c2VzRXhjZXB0aW9ucyA9IHRydWU7CiAgICAgCkBAIC0yNTQ2LDggKzI1NDYsOCBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kCiAgICAgdHJ5UmFuZ2UudHJ5
RGF0YS0+aGFuZGxlclR5cGUgPSBoYW5kbGVyVHlwZTsKIAogICAgIGVtaXRPcGNvZGUob3BfY2F0
Y2gpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXRSZWdpc3Rlci0+aW5kZXgoKSk7
Ci0gICAgcmV0dXJuIHRhcmdldFJlZ2lzdGVyOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChl
eGNlcHRpb25SZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRo
cm93blZhbHVlUmVnaXN0ZXItPmluZGV4KCkpOwogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC0yNzYw
LDcgKzI3NjAsMTEgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAog
ICAgICAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVlbmNlIGZvciB0aHJvdy1lZCBjb250cm9sIGZs
b3cuCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gY2F0Y2hIZXJlID0gZW1p
dExhYmVsKG5ld0xhYmVsKCkuZ2V0KCkpOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGV4Y2VwdGlvblJlZ2lzdGVyID0gcG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIG5ld1RlbXBv
cmFyeSgpLCBjYXRjaEhlcmUuZ2V0KCksIEhhbmRsZXJUeXBlOjpTeW50aGVzaXplZEZpbmFsbHkp
OworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gbmV3
VGVtcG9yYXJ5KCk7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhyb3duVmFsdWVS
ZWdpc3RlciA9IG5ld1RlbXBvcmFyeSgpOworICAgICAgICAgICAgcG9wVHJ5QW5kRW1pdENhdGNo
KHRyeURhdGEsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLAorICAgICAgICAgICAgICAgIHRocm93
blZhbHVlUmVnaXN0ZXIuZ2V0KCksIGNhdGNoSGVyZS5nZXQoKSwgSGFuZGxlclR5cGU6OlN5bnRo
ZXNpemVkRmluYWxseSk7CisKICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gY2F0Y2hEb25lID0g
bmV3TGFiZWwoKTsKIAogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVybk1ldGhv
ZCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlO
YW1lcygpLnJldHVybktleXdvcmQpOwpAQCAtMjc3OCw3ICsyNzgyLDggQEAgdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAogICAgICAgICAgICAgZW1pdFRocm93KGV4Y2Vw
dGlvblJlZ2lzdGVyLmdldCgpKTsKIAogICAgICAgICAgICAgLy8gQWJzb3JiIGV4Y2VwdGlvbi4K
LSAgICAgICAgICAgIHBvcFRyeUFuZEVtaXRDYXRjaChyZXR1cm5DYWxsVHJ5RGF0YSwgbmV3VGVt
cG9yYXJ5KCksIGNhdGNoRG9uZS5nZXQoKSwgSGFuZGxlclR5cGU6OlN5bnRoZXNpemVkRmluYWxs
eSk7CisgICAgICAgICAgICBwb3BUcnlBbmRFbWl0Q2F0Y2gocmV0dXJuQ2FsbFRyeURhdGEsIG5l
d1RlbXBvcmFyeSgpLAorICAgICAgICAgICAgICAgIG5ld1RlbXBvcmFyeSgpLCBjYXRjaERvbmUu
Z2V0KCksIEhhbmRsZXJUeXBlOjpTeW50aGVzaXplZEZpbmFsbHkpOwogICAgICAgICAgICAgZW1p
dFRocm93KGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKICAgICAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1Myw3ICs1NTMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gU3RhcnQgYSB0cnkgYmxvY2suICdzdGFy
dCcgbXVzdCBoYXZlIGJlZW4gZW1pdHRlZC4KICAgICAgICAgVHJ5RGF0YSogcHVzaFRyeShMYWJl
bCogc3RhcnQpOwogICAgICAgICAvLyBFbmQgYSB0cnkgYmxvY2suICdlbmQnIG11c3QgaGF2ZSBi
ZWVuIGVtaXR0ZWQuCi0gICAgICAgIFJlZ2lzdGVySUQqIHBvcFRyeUFuZEVtaXRDYXRjaChUcnlE
YXRhKiwgUmVnaXN0ZXJJRCogdGFyZ2V0UmVnaXN0ZXIsIExhYmVsKiBlbmQsIEhhbmRsZXJUeXBl
KTsKKyAgICAgICAgdm9pZCBwb3BUcnlBbmRFbWl0Q2F0Y2goVHJ5RGF0YSosIFJlZ2lzdGVySUQq
IGV4Y2VwdGlvblJlZ2lzdGVyLCBSZWdpc3RlcklEKiB0aHJvd25WYWx1ZVJlZ2lzdGVyLCBMYWJl
bCogZW5kLCBIYW5kbGVyVHlwZSk7CiAKICAgICAgICAgdm9pZCBlbWl0VGhyb3coUmVnaXN0ZXJJ
RCogZXhjKQogICAgICAgICB7IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODgxLDcgKzI4ODEsOSBAQCB2b2lkIFRyeU5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyCiAKICAgICAgICAgLy8gVW5jYXVnaHQgZXhjZXB0aW9uIHBhdGg6IHRoZSBj
YXRjaCBibG9jay4KICAgICAgICAgUmVmUHRyPExhYmVsPiBoZXJlID0gZ2VuZXJhdG9yLmVtaXRM
YWJlbChnZW5lcmF0b3IubmV3TGFiZWwoKS5nZXQoKSk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBleGNlcHRpb25SZWdpc3RlciA9IGdlbmVyYXRvci5wb3BUcnlBbmRFbWl0Q2F0Y2godHJ5
RGF0YSwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBoZXJlLmdldCgpLCBIYW5kbGVyVHlwZTo6
Q2F0Y2gpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVnaXN0ZXIgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aHJv
d25WYWx1ZVJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBnZW5l
cmF0b3IucG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgp
LCB0aHJvd25WYWx1ZVJlZ2lzdGVyLmdldCgpLCBoZXJlLmdldCgpLCBIYW5kbGVyVHlwZTo6Q2F0
Y2gpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fZmluYWxseUJsb2NrKSB7CiAgICAgICAgICAg
ICAvLyBJZiB0aGUgY2F0Y2ggYmxvY2sgdGhyb3dzIGFuIGV4Y2VwdGlvbiBhbmQgd2UgaGF2ZSBh
IGZpbmFsbHkgYmxvY2ssIHRoZW4gdGhlIGZpbmFsbHkKQEAgLTI4ODksNyArMjg5MSw3IEBAIHZv
aWQgVHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKICAgICAgICAgICAgIHRyeURh
dGEgPSBnZW5lcmF0b3IucHVzaFRyeShoZXJlLmdldCgpKTsKICAgICAgICAgfQogCi0gICAgICAg
IGdlbmVyYXRvci5lbWl0UHVzaENhdGNoU2NvcGUoZ2VuZXJhdG9yLnNjb3BlUmVnaXN0ZXIoKSwg
bV9leGNlcHRpb25JZGVudCwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksIERvbnREZWxldGUpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdFB1c2hDYXRjaFNjb3BlKGdlbmVyYXRvci5zY29wZVJlZ2lz
dGVyKCksIG1fdGhyb3duVmFsdWVJZGVudCwgdGhyb3duVmFsdWVSZWdpc3Rlci5nZXQoKSwgRG9u
dERlbGV0ZSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KG1fdHJ5
QmxvY2stPmVuZE9mZnNldCgpICsgMSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3Qs
IG1fY2F0Y2hCbG9jayk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UG9wU2NvcGUoZ2VuZXJhdG9y
LnNjb3BlUmVnaXN0ZXIoKSk7CkBAIC0yOTEyLDEwICsyOTE0LDEyIEBAIHZvaWQgVHJ5Tm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGZp
bmFsbHlFbmRMYWJlbC5nZXQoKSk7CiAKICAgICAgICAgLy8gVW5jYXVnaHQgZXhjZXB0aW9uIHBh
dGg6IGludm9rZSB0aGUgZmluYWxseSBibG9jaywgdGhlbiByZS10aHJvdyB0aGUgZXhjZXB0aW9u
LgotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcEV4Y2VwdGlvblJlZ2lzdGVyID0gZ2Vu
ZXJhdG9yLnBvcFRyeUFuZEVtaXRDYXRjaCh0cnlEYXRhLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIHByZUZpbmFsbHlMYWJlbC5nZXQoKSwgSGFuZGxlclR5cGU6OkZpbmFsbHkpOworICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aHJvd25WYWx1ZVJlZ2lzdGVy
ID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBnZW5lcmF0b3IucG9wVHJ5QW5k
RW1pdENhdGNoKHRyeURhdGEsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLCB0aHJvd25WYWx1ZVJl
Z2lzdGVyLmdldCgpLCBwcmVGaW5hbGx5TGFiZWwuZ2V0KCksIEhhbmRsZXJUeXBlOjpGaW5hbGx5
KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3coZmluYWxseVN0YXJ0
T2Zmc2V0KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9maW5hbGx5QmxvY2sp
OwotICAgICAgICBnZW5lcmF0b3IuZW1pdFRocm93KHRlbXBFeGNlcHRpb25SZWdpc3Rlci5nZXQo
KSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VGhyb3coZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkp
OwogCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZmluYWxseUVuZExhYmVsLmdldCgpKTsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cobV9maW5hbGx5QmxvY2st
PmVuZE9mZnNldCgpICsgMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw3ICs0ODcsNyBA
QCBib29sIERlYnVnZ2VyOjpoYXNCcmVha3BvaW50KFNvdXJjZUlEIHNvCiAgICAgLy8gc28gbWFr
ZSBpdCBsb29rcyBsaWtlIHRoZSBkZWJ1Z2dlciBpcyBhbHJlYWR5IHBhdXNlZC4KICAgICBUZW1w
b3JhcnlQYXVzZWRTdGF0ZSBwYXVzZWRTdGF0ZSgqdGhpcyk7CiAKLSAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICBEZWJ1Z2dlckNhbGxGcmFtZSog
ZGVidWdnZXJDYWxsRnJhbWUgPSBjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUoKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGRlYnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0ZShicmVha3BvaW50LT5jb25k
aXRpb24sIGV4Y2VwdGlvbik7CiAKQEAgLTY5NSwxMyArNjk1LDEzIEBAIHZvaWQgRGVidWdnZXI6
OnBhdXNlSWZOZWVkZWQoQ2FsbEZyYW1lKiAKICAgICB9CiB9CiAKLXZvaWQgRGVidWdnZXI6OmV4
Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNlcHRpb24sIGJvb2wgaGFz
SGFuZGxlcikKK3ZvaWQgRGVidWdnZXI6OmV4Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNWYWx1ZSBleGNlcHRpb24sIGJvb2wgaGFzQ2F0Y2hIYW5kbGVyKQogewogICAgIGlmIChtX2lz
UGF1c2VkKQogICAgICAgICByZXR1cm47CiAKICAgICBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHJl
YXNvbigqdGhpcywgUGF1c2VkRm9yRXhjZXB0aW9uKTsKLSAgICBpZiAobV9wYXVzZU9uRXhjZXB0
aW9uc1N0YXRlID09IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8IChtX3BhdXNlT25FeGNlcHRpb25z
U3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAmJiAhaGFzSGFuZGxlcikpIHsKKyAg
ICBpZiAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8
IChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAm
JiAhaGFzQ2F0Y2hIYW5kbGVyKSkgewogICAgICAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0g
dHJ1ZTsKICAgICAgICAgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCShyZXZp
c2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdm9pZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgU291cmNlUHJvdmlkZXIqLCBpbnQgZXJy
b3JMaW5lTnVtYmVyLCBjb25zdCBXVEY6OlN0cmluZyYgZXJyb3JNZXNzYWdlKSA9IDA7CiAKLSAg
ICB2b2lkIGV4Y2VwdGlvbihDYWxsRnJhbWUqLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBib29s
IGhhc0hhbmRsZXIpOworICAgIHZvaWQgZXhjZXB0aW9uKENhbGxGcmFtZSosIEpTVmFsdWUgZXhj
ZXB0aW9uVmFsdWUsIGJvb2wgaGFzQ2F0Y2hIYW5kbGVyKTsKICAgICB2b2lkIGF0U3RhdGVtZW50
KENhbGxGcmFtZSopOwogICAgIHZvaWQgY2FsbEV2ZW50KENhbGxGcmFtZSopOwogICAgIHZvaWQg
cmV0dXJuRXZlbnQoQ2FsbEZyYW1lKik7CkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhKU0dsb2JhbE9iamVj
dCopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUJyZWFrcG9pbnRI
aXQoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBCcmVha3BvaW50JikgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIGhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlvbihFeGVjU3RhdGUqLCBKU1Zh
bHVlIGV4Y2VwdGlvbikgY29uc3QgeyBVTlVTRURfUEFSQU0oZXhjZXB0aW9uKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24oRXhlY1N0YXRl
KiwgRXhjZXB0aW9uKikgY29uc3QgeyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBhdXNlKEpT
R2xvYmFsT2JqZWN0KiwgUmVhc29uRm9yUGF1c2UpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyRXZhbEVuYWJsZXIuaCIKICNpbmNsdWRl
ICJEZWJ1Z2dlclNjb3BlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaCIKQEAgLTE3Niw3ICsxNzcsNyBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZy
YW1lOjp0aGlzVmFsdWUoKSBjCiB9CiAKIC8vIEV2YWx1YXRlIHNvbWUgSmF2YVNjcmlwdCBjb2Rl
IGluIHRoZSBzY29wZSBvZiB0aGlzIGZyYW1lLgotSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6
ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIEpTVmFsdWUmIGV4Y2VwdGlvbikKK0pTVmFs
dWUgRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBFeGNl
cHRpb24qJiBleGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBtX2NhbGxGcmFtZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCShyZXZpc2lvbiAxODUxMTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IERlYnVnZ2VyU2NvcGU7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiB0eXBl
ZGVmIEV4ZWNTdGF0ZSBDYWxsRnJhbWU7CiAKQEAgLTY2LDcgKzY3LDcgQEAgcHVibGljOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBmdW5jdGlvbk5hbWUoKSBjb25zdDsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBUeXBlIHR5cGUoKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBK
U1ZhbHVlIHRoaXNWYWx1ZSgpIGNvbnN0OwotICAgIEpTVmFsdWUgZXZhbHVhdGUoY29uc3QgU3Ry
aW5nJiwgSlNWYWx1ZSYgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0
cmluZyYsIEV4Y2VwdGlvbiomKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9jYWxsRnJhbWU7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGludmFsaWRhdGUo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5LDkgKzEzOSw5IEBAIERlcHJlY2F0ZWQ6OlNjcmlwdE9iamVjdCBJbmpl
Y3RlZFNjcmlwdE0KICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NyaXB0U3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBKU1ZhbHVlIGdsb2JhbFRoaXNWYWx1ZSA9
IHNjcmlwdFN0YXRlLT5nbG9iYWxUaGlzVmFsdWUoKTsKIAotICAgIEpTVmFsdWUgZXZhbHVhdGlv
bkV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV2YWx1YXRpb25FeGNlcHRpb247CiAgICAgSW5z
cGVjdG9yRXZhbHVhdGVIYW5kbGVyIGV2YWx1YXRlSGFuZGxlciA9IG1fZW52aXJvbm1lbnQuZXZh
bHVhdGVIYW5kbGVyKCk7Ci0gICAgSlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gZXZhbHVhdGVIYW5k
bGVyKHNjcmlwdFN0YXRlLCBzb3VyY2VDb2RlLCBnbG9iYWxUaGlzVmFsdWUsICZldmFsdWF0aW9u
RXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBldmFsdWF0ZUhhbmRsZXIo
c2NyaXB0U3RhdGUsIHNvdXJjZUNvZGUsIGdsb2JhbFRoaXNWYWx1ZSwgZXZhbHVhdGlvbkV4Y2Vw
dGlvbik7CiAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgIHJldHVybiBEZXBy
ZWNhdGVkOjpTY3JpcHRPYmplY3QoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9u
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMyArMzMsMTQgQEAgY2xhc3MgU3RvcHdhdGNo
OwogfQogCiBuYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIFNvdXJjZUNv
ZGU7CiB9CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIEpTQzo6SlNWYWx1ZSAo
Kkluc3BlY3RvckZ1bmN0aW9uQ2FsbEhhbmRsZXIpKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IEpT
Qzo6Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6
OkFyZ0xpc3QmIGFyZ3MsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKTsKLXR5cGVkZWYgSlNDOjpK
U1ZhbHVlICgqSW5zcGVjdG9yRXZhbHVhdGVIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6U291cmNlQ29kZSYsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6SlNWYWx1ZSog
ZXhjZXB0aW9uKTsKK3R5cGVkZWYgSlNDOjpKU1ZhbHVlICgqSW5zcGVjdG9yRnVuY3Rpb25DYWxs
SGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEs
IEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpF
eGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbik7Cit0eXBlZGVmIEpTQzo6SlNWYWx1ZSAoKklu
c3BlY3RvckV2YWx1YXRlSGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJj
ZUNvZGUmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkV4Y2VwdGlvbiomIHJldHVybmVk
RXhjZXB0aW9uKTsKIAogY2xhc3MgSW5zcGVjdG9yRW52aXJvbm1lbnQgewogcHVibGljOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdElu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW5jbHVkZSAiQ29tcGxldGlvbi5oIgogI2luY2x1ZGUgIkNvbnNvbGVNZXNzYWdlLmgiCiAjaW5j
bHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5j
bHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKQEAgLTE4OCw3ICsxODksNyBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6CiAjZW5kaWYKIH0KIAotdm9p
ZCBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6OnJlcG9ydEFQSUV4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXhjZXB0aW9uKQordm9pZCBKU0dsb2JhbE9iamVjdElu
c3BlY3RvckNvbnRyb2xsZXI6OnJlcG9ydEFQSUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4
Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNl
cHRpb24oZXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAxLDcgKzIwMiw3IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjoKIAogICAgIC8vIEZJWE1FOiA8
aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNwZWN0b3I6IFNob3VsZCBub3QgZXZh
bHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCiAgICAgLy8gSWYgdGhpcyBpcyBh
IGN1c3RvbSBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRvIHRyeSBhbmQg
Z2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRpb24uCi0gICAg
U3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAg
IGlmIChKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OmxvZ1RvU3lzdGVtQ29uc29sZSgpKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmgJKHJldmlzaW9uIDE4
NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJ
bnNwZWN0b3JDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgY2xh
c3MgU3RvcHdhdGNoOwogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENvbnNvbGVDbGllbnQ7Citj
bGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsK
IGNsYXNzIEpTVmFsdWU7CkBAIC04MSw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElu
Y2x1ZGVzTmF0aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4Y2VwdGlvbnMoYm9vbCBpbmNsdWRl
c05hdGl2ZUNhbGxTdGFjaykgeyBtX2luY2x1ZGVOYXRpdmVDYWxsU3RhY2tXaXRoRXhjZXB0aW9u
cyA9IGluY2x1ZGVzTmF0aXZlQ2FsbFN0YWNrOyB9CiAKICAgICB2b2lkIHBhdXNlKCk7Ci0gICAg
dm9pZCByZXBvcnRBUElFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhj
ZXB0aW9uKTsKKyAgICB2b2lkIHJlcG9ydEFQSUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RXhjZXB0aW9uKik7CiAKICAgICBKU0M6OkNvbnNvbGVDbGllbnQqIGNvbnNvbGVDbGllbnQo
KSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmgJKHJldmlz
aW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxP
YmplY3RTY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBA
IHByaXZhdGU6CiAgICAgLy8gTk9URTogQ3VycmVudGx5IGFsbCBleGNlcHRpb25zIGFyZSByZXBv
cnRlZCBhdCB0aGUgQVBJIGJvdW5kYXJ5IHRocm91Z2ggcmVwb3J0QVBJRXhjZXB0aW9uLgogICAg
IC8vIFVudGlsIGEgdGltZSBjb21lcyB3aGVyZSBhbiBleGNlcHRpb24gY2FuIGJlIGNhdXNlZCBv
dXRzaWRlIG9mIHRoZSBBUEkgKGUuZy4gc2V0VGltZW91dAogICAgIC8vIG9yIHNvbWUgb3RoZXIg
YXN5bmMgb3BlcmF0aW9uIGluIGEgcHVyZSBKU0NvbnRleHQpIHdlIGNhbiBpZ25vcmUgZXhjZXB0
aW9ucyByZXBvcnRlZCBoZXJlLgotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZpcnR1
YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiop
IGNvbnN0IG92ZXJyaWRlIHsgfQogCiAgICAgTGlzdGVuZXJTZXQgbV9saXN0ZW5lcnM7CiAgICAg
SlNDOjpKU0dsb2JhbE9iamVjdCYgbV9nbG9iYWxPYmplY3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKICNpbmNsdWRlICJFcnJvci5oIgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJK
U0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBl
LmgiCkBAIC03NSw3ICs3Niw3IEBAIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6fkpTSmF2YVNjcmlw
dENhbGwKIAogSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2Vw
dGlvbjsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwoKS5ldmFsdWF0ZShleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIGV4Y2VwdGlvbik7CiAgICAgaWYgKGV4
Y2VwdGlvbikKICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRp
b24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2Fs
bEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
YXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5
R2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+dm1FbnRy
eUdsb2JhbE9iamVjdCgpOyB9CiAKICAgICBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7IH0KLSAgICBKU0M6OkpT
VmFsdWUgZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIEpTQzo6SlNWYWx1ZSYgZXhjZXB0
aW9uKSBjb25zdCAgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoc2NyaXB0
LCBleGNlcHRpb24pOyB9CisgICAgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0cmluZyYg
c2NyaXB0LCBKU0M6OkV4Y2VwdGlvbiomIGV4Y2VwdGlvbikgY29uc3QgIHsgcmV0dXJuIG1fZGVi
dWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKHNjcmlwdCwgZXhjZXB0aW9uKTsgfQogCiBwcml2YXRl
OgogICAgIEphdmFTY3JpcHRDYWxsRnJhbWUoUGFzc1JlZlB0cjxKU0M6OkRlYnVnZ2VyQ2FsbEZy
YW1lPik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxT
dGFja0ZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJTY3JpcHRDYWxsU3Rh
Y2tGYWN0b3J5LmgiCiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIlNjcmlwdEFyZ3VtZW50cy5oIgpAQCAtMTI4LDEwICsxMjksMTAgQEAgc3RhdGlj
IHZvaWQgZXh0cmFjdFNvdXJjZUluZm9ybWF0aW9uRnJvbQogICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CiB9CiAKLVBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxs
U3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUmIGV4
Y2VwdGlvbiwgc2l6ZV90IG1heFN0YWNrU2l6ZSkKK1Bhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNr
PiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uLCBzaXplX3QgbWF4U3RhY2tTaXplKQogewogICAg
IFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+IGZyYW1lczsKLSAgICBSZWZDb3VudGVkQXJyYXk8U3Rh
Y2tGcmFtZT4gc3RhY2tUcmFjZSA9IGV4ZWMtPnZtKCkuZXhjZXB0aW9uU3RhY2soKTsKKyAgICBS
ZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZSA9IGV4Y2VwdGlvbi0+c3RhY2so
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpICYmIGkgPCBt
YXhTdGFja1NpemU7IGkrKykgewogICAgICAgICB1bnNpZ25lZCBsaW5lOwogICAgICAgICB1bnNp
Z25lZCBjb2x1bW47CkBAIC0xNDEsOCArMTQyLDggQEAgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3Rh
Y2s+IGNyZWF0ZVNjcmlwdAogICAgIH0KIAogICAgIC8vIEZhbGxiYWNrIHRvIGdldHRpbmcgYXQg
bGVhc3QgdGhlIGxpbmUgYW5kIHNvdXJjZVVSTCBmcm9tIHRoZSBleGNlcHRpb24gb2JqZWN0IGlm
IGl0IGhhcyB2YWx1ZXMgYW5kIHRoZSBleGNlcHRpb25TdGFjayBkb2Vzbid0LgotICAgIEpTT2Jq
ZWN0KiBleGNlcHRpb25PYmplY3QgPSBleGNlcHRpb24udG9PYmplY3QoZXhlYyk7Ci0gICAgaWYg
KGV4Y2VwdGlvbi5pc09iamVjdCgpKSB7CisgICAgaWYgKGV4Y2VwdGlvbi0+dmFsdWUoKS5pc09i
amVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3QgPSBleGNlcHRpb24t
PnZhbHVlKCkudG9PYmplY3QoZXhlYyk7CiAgICAgICAgIGludCBsaW5lTnVtYmVyOwogICAgICAg
ICBpbnQgY29sdW1uTnVtYmVyOwogICAgICAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJMOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0
b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3Jp
cHRDYWxsU3RhY2tGYWN0b3J5LmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNl
IEpTQyB7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBKU1ZhbHVl
OwogfQpAQCAtNDcsNyArNDgsNyBAQCBjbGFzcyBTY3JpcHRDYWxsU3RhY2s7CiAvLyBGSVhNRTog
VGhlIHN1YnRsZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZXNlIHNob3VsZCBiZSBlbGltaW5hdGVk
LgogSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNj
cmlwdENhbGxTdGFjayhKU0M6OkV4ZWNTdGF0ZSosIHNpemVfdCBtYXhTdGFja1NpemUpOwogSlNf
RVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdENh
bGxTdGFja0ZvckNvbnNvbGUoSlNDOjpFeGVjU3RhdGUqLCBzaXplX3QgbWF4U3RhY2tTaXplKTsK
LUpTX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3Jp
cHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlJiBl
eGNlcHRpb24sIHNpemVfdCBtYXhTdGFja1NpemUpOworSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1Jl
ZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiosIHNpemVfdCBtYXhTdGFja1NpemUpOwog
SlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGNyZWF0ZVNjcmlw
dEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KTsK
IAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkRlYnVn
Z2VyQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJTY29wZS5oIgorI2luY2x1ZGUgIkV4
Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTSmF2YVNjcmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IkpTTG9jay5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKQEAgLTkzLDcgKzk0
LDcgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3BvaQogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBTY3JpcHRCcmVha3BvaW50QWN0aW9uVHlwZUV2YWx1YXRl
OiB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgICAgICBFeGNlcHRpb24qIGV4Y2Vw
dGlvbjsKICAgICAgICAgZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKGJyZWFrcG9pbnRBY3Rp
b24uZGF0YSwgZXhjZXB0aW9uKTsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAg
IHJlcG9ydEV4Y2VwdGlvbihkZWJ1Z2dlckNhbGxGcmFtZS0+ZXhlYygpLCBleGNlcHRpb24pOwpA
QCAtMTAzLDEzICsxMDQsMTMgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVh
a3BvaQogICAgICAgICBkaXNwYXRjaEJyZWFrcG9pbnRBY3Rpb25Tb3VuZChkZWJ1Z2dlckNhbGxG
cmFtZS0+ZXhlYygpLCBicmVha3BvaW50QWN0aW9uLmlkZW50aWZpZXIpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlUHJvYmU6IHsKLSAgICAgICAg
SlNWYWx1ZSBleGNlcHRpb247CisgICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uOwogICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGRlYnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0ZShicmVha3BvaW50
QWN0aW9uLmRhdGEsIGV4Y2VwdGlvbik7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAg
ICAgICByZXBvcnRFeGNlcHRpb24oZGVidWdnZXJDYWxsRnJhbWUtPmV4ZWMoKSwgZXhjZXB0aW9u
KTsKICAgICAgICAgCiAgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSA9IGRlYnVnZ2VyQ2Fs
bEZyYW1lLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB3cmFwcGVkUmVzdWx0ID0gRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUoc3RhdGUtPnZtKCksIGV4Y2VwdGlvbiA/IGV4Y2VwdGlvbiA6IHJlc3VsdCk7CisgICAg
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHdyYXBwZWRSZXN1bHQgPSBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZShzdGF0ZS0+dm0oKSwgZXhjZXB0aW9uID8gZXhjZXB0aW9uLT52YWx1ZSgpIDog
cmVzdWx0KTsKICAgICAgICAgZGlzcGF0Y2hCcmVha3BvaW50QWN0aW9uUHJvYmUoc3RhdGUsIGJy
ZWFrcG9pbnRBY3Rpb24sIHdyYXBwZWRSZXN1bHQpOwogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0zMDIsNyArMzAzLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlQnJlYWtwb2lu
dAogICAgIH0KIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlRXhjZXB0aW9uSW5C
cmVha3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZXhj
ZXB0aW9uKSBjb25zdAordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlRXhjZXB0aW9uSW5C
cmVha3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkV4Y2VwdGlvbiog
ZXhjZXB0aW9uKSBjb25zdAogewogICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24p
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1Nl
cnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2Ny
aXB0RGVidWdTZXJ2ZXIuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoSlNDOjpK
U0dsb2JhbE9iamVjdCopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcnVuRXZlbnRMb29wV2hpbGVQ
YXVzZWQoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudFNjcmlwdChKU0M6OkV4ZWNT
dGF0ZSopIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJl
cG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKikgY29uc3QgPSAw
OwogCiAgICAgYm9vbCBldmFsdWF0ZUJyZWFrcG9pbnRBY3Rpb24oY29uc3QgU2NyaXB0QnJlYWtw
b2ludEFjdGlvbiYpOwogCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgc291cmNlUGFyc2VkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpTb3VyY2VQcm92aWRlcios
IGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNc2cpIG92ZXJyaWRlIGZpbmFsOwog
ICAgIHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhKU0M6OkpTR2xvYmFsT2JqZWN0Kikg
b3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVC
cmVha3BvaW50SGl0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OkJyZWFrcG9pbnQm
KSBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXhjZXB0aW9uSW5CcmVh
a3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbikg
Y29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV4Y2VwdGlvbklu
QnJlYWtwb2ludENvbmRpdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKikgY29u
c3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBhdXNlKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkRlYnVnZ2VyOjpSZWFzb25Gb3JQYXVzZSkgb3ZlcnJpZGUgZmlu
YWw7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMo
KSBvdmVycmlkZSBmaW5hbDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSAr
MjQsMTEgQEAKICNkZWZpbmUgQ2FsbEZyYW1lX2gKIAogI2luY2x1ZGUgIkFic3RyYWN0UEMuaCIK
LSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUgIlN0YWNr
VmlzaXRvci5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgog
CiBuYW1lc3BhY2UgSlNDICB7CkBAIC03NSwxMyArNzUsOSBAQCBuYW1lc3BhY2UgSlNDICB7CiAg
ICAgICAgIC8vIEJ1dCB0aGV5J3JlIHVzZWQgaW4gbWFueSBwbGFjZXMgaW4gbGVnYWN5IGNvZGUs
IHNvIHRoZXkncmUgbm90IGdvaW5nIGF3YXkgYW55IHRpbWUgc29vbi4KIAogICAgICAgICB2b2lk
IGNsZWFyRXhjZXB0aW9uKCkgeyB2bSgpLmNsZWFyRXhjZXB0aW9uKCk7IH0KLSAgICAgICAgdm9p
ZCBjbGVhclN1cHBsZW1lbnRhcnlFeGNlcHRpb25JbmZvKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgdm0oKS5jbGVhckV4Y2VwdGlvblN0YWNrKCk7Ci0gICAgICAgIH0KIAotICAgICAgICBKU1Zh
bHVlIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIHZtKCkuZXhjZXB0aW9uKCk7IH0KLSAgICAg
ICAgYm9vbCBoYWRFeGNlcHRpb24oKSBjb25zdCB7IHJldHVybiAhdm0oKS5leGNlcHRpb24oKS5p
c0VtcHR5KCk7IH0KKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKSBjb25zdCB7IHJldHVy
biB2bSgpLmV4Y2VwdGlvbigpOyB9CisgICAgICAgIGJvb2wgaGFkRXhjZXB0aW9uKCkgY29uc3Qg
eyByZXR1cm4gISF2bSgpLmV4Y2VwdGlvbigpOyB9CiAKICAgICAgICAgQXRvbWljU3RyaW5nVGFi
bGUqIGF0b21pY1N0cmluZ1RhYmxlKCkgY29uc3QgeyByZXR1cm4gdm0oKS5hdG9taWNTdHJpbmdU
YWJsZSgpOyB9CiAgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVz
KCkgY29uc3QgeyByZXR1cm4gKnZtKCkucHJvcGVydHlOYW1lczsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lv
biAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiRGVidWdn
ZXJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJFcnJvckluc3RhbmNlLmgiCiAjaW5jbHVkZSAiRXZh
bENvZGVDYWNoZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJKU0FycmF5
LmgiCkBAIC00MzUsNyArNDM2LDcgQEAgc3RhdGljIGJvb2wgdW53aW5kQ2FsbEZyYW1lKFN0YWNr
VmlzaXRvcgogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gdmlzaXRvci0+Y2FsbEZyYW1l
KCk7CiAgICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2Jh
bE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7Ci0gICAgICAgIENsZWFyRXhjZXB0aW9uU2NvcGUgc2Nv
cGUoJmNhbGxGcmFtZS0+dm0oKSk7CisgICAgICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZSBzY29w
ZSgmY2FsbEZyYW1lLT52bSgpKTsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkpKQogICAgICAgICAgICAgZGVidWdnZXItPnJldHVybkV2
ZW50KGNhbGxGcmFtZSk7CiAgICAgICAgIGVsc2UKQEAgLTU4Myw5ICs1ODQsOSBAQCBKU1N0cmlu
ZyogSW50ZXJwcmV0ZXI6OnN0YWNrVHJhY2VBc1N0cmluCiAgICAgcmV0dXJuIGpzU3RyaW5nKCZl
eGVjLT52bSgpLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCi1jbGFzcyBHZXRFeGNlcHRpb25I
YW5kbGVyRnVuY3RvciB7CitjbGFzcyBHZXRDYXRjaEhhbmRsZXJGdW5jdG9yIHsKIHB1YmxpYzoK
LSAgICBHZXRFeGNlcHRpb25IYW5kbGVyRnVuY3RvcigpCisgICAgR2V0Q2F0Y2hIYW5kbGVyRnVu
Y3RvcigpCiAgICAgICAgIDogbV9oYW5kbGVyKDApCiAgICAgewogICAgIH0KQEAgLTU5OSw3ICs2
MDAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51
ZTsKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHZpc2l0b3ItPmJ5dGVjb2Rl
T2Zmc2V0KCk7Ci0gICAgICAgIG1faGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgY29uc3QgYm9vbCBSZXF1aXJlQ2F0
Y2hIYW5kbGVyID0gdHJ1ZTsKKyAgICAgICAgbV9oYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVy
Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVDYXRjaEhhbmRsZXIpOwog
ICAgICAgICBpZiAobV9oYW5kbGVyKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6
RG9uZTsKIApAQCAtNjQ5LDExICs2NTEsMTIgQEAgcHJpdmF0ZToKICAgICBIYW5kbGVySW5mbyom
IG1faGFuZGxlcjsKIH07CiAKLU5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6
OnVud2luZChWTUVudHJ5RnJhbWUqJiB2bUVudHJ5RnJhbWUsIENhbGxGcmFtZSomIGNhbGxGcmFt
ZSwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUpCitORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIElu
dGVycHJldGVyOjp1bndpbmQoVk1FbnRyeUZyYW1lKiYgdm1FbnRyeUZyYW1lLCBDYWxsRnJhbWUq
JiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBib29sIGlzVGVybWluYXRpb24g
PSBmYWxzZTsKIAorICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGNlcHRpb24tPnZhbHVl
KCk7CiAgICAgQVNTRVJUKCFleGNlcHRpb25WYWx1ZS5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCgh
ZXhjZXB0aW9uVmFsdWUuaXNDZWxsKCkgfHwgZXhjZXB0aW9uVmFsdWUuYXNDZWxsKCkpOwogICAg
IC8vIFRoaXMgc2hvdWxkbid0IGJlIHBvc3NpYmxlIChoZW5jZSB0aGUgYXNzZXJ0aW9ucyksIGJ1
dCB3ZSdyZSBhbHJlYWR5IGluIHRoZSBzbG93ZXN0IG9mCkBAIC02NjIsMzIgKzY2NSwzNSBAQCBO
RVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1CiAgICAgICAgIGV4Y2VwdGlv
blZhbHVlID0ganNOdWxsKCk7CiAKICAgICBpZiAoZXhjZXB0aW9uVmFsdWUuaXNPYmplY3QoKSkK
LSAgICAgICAgaXNUZXJtaW5hdGlvbiA9IGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihh
c09iamVjdChleGNlcHRpb25WYWx1ZSkpOworICAgICAgICBpc1Rlcm1pbmF0aW9uID0gaXNUZXJt
aW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbik7CiAKLSAgICBBU1NFUlQoY2FsbEZy
YW1lLT52bSgpLmV4Y2VwdGlvblN0YWNrKCkuc2l6ZSgpKTsKKyAgICBBU1NFUlQoY2FsbEZyYW1l
LT52bSgpLmV4Y2VwdGlvbigpICYmIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKS0+c3RhY2so
KS5zaXplKCkpOwogCiAgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVudHJ5
R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7Ci0gICAgaWYgKGRlYnVnZ2VyICYmIGRlYnVnZ2Vy
LT5uZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcygpKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gY2xl
YXIgdGhlIGV4Y2VwdGlvbiBhbmQgdGhlIGV4Y2VwdGlvbiBzdGFjayBoZXJlIGluIG9yZGVyIHRv
IHNlZSBpZiBhIG5ldyBleGNlcHRpb24gaGFwcGVucy4KKyAgICBpZiAoZGVidWdnZXIgJiYgZGVi
dWdnZXItPm5lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKCkgJiYgIWV4Y2VwdGlvbi0+ZGlkTm90aWZ5
SW5zcGVjdG9yT2ZUaHJvdygpKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgdGhlIGV4
Y2VwdGlvbiBoZXJlIGluIG9yZGVyIHRvIHNlZSBpZiBhIG5ldyBleGNlcHRpb24gaGFwcGVucy4K
ICAgICAgICAgLy8gQWZ0ZXJ3YXJkcywgdGhlIHZhbHVlcyBhcmUgcHV0IGJhY2sgdG8gY29udGlu
dWUgcHJvY2Vzc2luZyB0aGlzIGVycm9yLgotICAgICAgICBDbGVhckV4Y2VwdGlvblNjb3BlIHNj
b3BlKCZjYWxsRnJhbWUtPnZtKCkpOworICAgICAgICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgc2Nv
cGUoJmNhbGxGcmFtZS0+dm0oKSk7CiAgICAgICAgIC8vIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQg
aWYgdGhlIGRlYnVnZ2VyIGlzIGVuYWJsZWQgdGhlbiB0aGVyZSBpcyBubyBpbmxpbmluZy4KICAg
ICAgICAgLy8gSWYgdGhhdCBhc3N1bXB0aW9uIHR1cm5zIG91dCB0byBiZSBmYWxzZSB0aGVuIHdl
J2xsIGlnbm9yZSB0aGUgaW5saW5lZCBjYWxsCiAgICAgICAgIC8vIGZyYW1lcy4KICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTc1NAogCi0gICAg
ICAgIGJvb2wgaGFzSGFuZGxlcjsKKyAgICAgICAgYm9vbCBoYXNDYXRjaEhhbmRsZXI7CiAgICAg
ICAgIGlmIChpc1Rlcm1pbmF0aW9uKQotICAgICAgICAgICAgaGFzSGFuZGxlciA9IGZhbHNlOwor
ICAgICAgICAgICAgaGFzQ2F0Y2hIYW5kbGVyID0gZmFsc2U7CiAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgR2V0RXhjZXB0aW9uSGFuZGxlckZ1bmN0b3IgZnVuY3RvcjsKKyAgICAgICAgICAg
IEdldENhdGNoSGFuZGxlckZ1bmN0b3IgZnVuY3RvcjsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+
aXRlcmF0ZShmdW5jdG9yKTsKLSAgICAgICAgICAgIGhhc0hhbmRsZXIgPSAhIWZ1bmN0b3IuaGFu
ZGxlcigpOworICAgICAgICAgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSBmdW5jdG9yLmhhbmRs
ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCghaGFuZGxlciB8fCBoYW5kbGVyLT5pc0NhdGNoSGFu
ZGxlcigpKTsKKyAgICAgICAgICAgIGhhc0NhdGNoSGFuZGxlciA9ICEhaGFuZGxlcjsKICAgICAg
ICAgfQogCi0gICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25W
YWx1ZSwgaGFzSGFuZGxlcik7CisgICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oY2FsbEZyYW1l
LCBleGNlcHRpb25WYWx1ZSwgaGFzQ2F0Y2hIYW5kbGVyKTsKICAgICAgICAgQVNTRVJUKCFjYWxs
RnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKICAgICB9CisgICAgZXhjZXB0aW9uLT5zZXREaWROb3Rp
ZnlJbnNwZWN0b3JPZlRocm93KCk7CiAKICAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhh
bmRsZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgogICAgIEhhbmRs
ZXJJbmZvKiBoYW5kbGVyID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
OTgsMjAgKzk4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGV4cHJlc3Npb25J
bmZvKGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25l
ZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbik7CiAgICAgfTsKIAotICAgIGNsYXNzIENsZWFyRXhj
ZXB0aW9uU2NvcGUgeworICAgIGNsYXNzIFN1c3BlbmRFeGNlcHRpb25TY29wZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBDbGVhckV4Y2VwdGlvblNjb3BlKFZNKiB2bSk6IG1fdm0odm0pCisgICAg
ICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZShWTSogdm0pCisgICAgICAgICAgICA6IG1fdm0odm0p
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHZtLT5nZXRFeGNlcHRpb25JbmZvKG9sZEV4Y2VwdGlv
biwgb2xkRXhjZXB0aW9uU3RhY2spOworICAgICAgICAgICAgb2xkRXhjZXB0aW9uID0gdm0tPmV4
Y2VwdGlvbigpOwogICAgICAgICAgICAgdm0tPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIH0K
LSAgICAgICAgfkNsZWFyRXhjZXB0aW9uU2NvcGUoKQorICAgICAgICB+U3VzcGVuZEV4Y2VwdGlv
blNjb3BlKCkKICAgICAgICAgewotICAgICAgICAgICAgbV92bS0+c2V0RXhjZXB0aW9uSW5mbyhv
bGRFeGNlcHRpb24sIG9sZEV4Y2VwdGlvblN0YWNrKTsKKyAgICAgICAgICAgIG1fdm0tPnNldEV4
Y2VwdGlvbihvbGRFeGNlcHRpb24pOwogICAgICAgICB9CiAgICAgcHJpdmF0ZToKLSAgICAgICAg
SlNDOjpKU1ZhbHVlIG9sZEV4Y2VwdGlvbjsKLSAgICAgICAgUmVmQ291bnRlZEFycmF5PEpTQzo6
U3RhY2tGcmFtZT4gb2xkRXhjZXB0aW9uU3RhY2s7CisgICAgICAgIEV4Y2VwdGlvbiogb2xkRXhj
ZXB0aW9uOwogICAgICAgICBWTSogbV92bTsKICAgICB9OwogICAgIApAQCAtMjE1LDcgKzIxNSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgU2FtcGxpbmdUb29sKiBzYW1w
bGVyKCkgeyByZXR1cm4gbV9zYW1wbGVyLmdldCgpOyB9CiAKLSAgICAgICAgTkVWRVJfSU5MSU5F
IEhhbmRsZXJJbmZvKiB1bndpbmQoVk1FbnRyeUZyYW1lKiYsIENhbGxGcmFtZSomLCBKU1ZhbHVl
Jik7CisgICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdW53aW5kKFZNRW50cnlGcmFt
ZSomLCBDYWxsRnJhbWUqJiwgRXhjZXB0aW9uKik7CiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lk
IGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9va0lEKTsKICAgICAgICAgSlNTdHJpbmcqIHN0YWNr
VHJhY2VBc1N0cmluZyhFeGVjU3RhdGUqLCBWZWN0b3I8U3RhY2tGcmFtZT4pOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lv
biAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw3ICsyMjMsNyBAQCBBc3NlbWJseUhlbHBlcnM6Okp1
bXAgQXNzZW1ibHlIZWxwZXJzOjplCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICByZXN1bHQgPSBi
cmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJv
LCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKICNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgcmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNl
cHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJl
dF9jYXN0PGNoYXIqPih2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZh
bHVlVGFnKSk7CisgICAgcmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25D
aGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZF
eGNlcHRpb24oKSksIFRydXN0ZWRJbW0zMigwKSk7CiAjZW5kaWYKICAgICAKICAgICBpZiAod2lk
dGggPT0gTm9ybWFsSnVtcFdpZHRoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNiArNDAs
MTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4
ZWNTdGF0ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlKQordm9pZCBnZW5lcmlj
VW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUpCiB7CiAgICAgaWYgKE9wdGlvbnM6
OmJyZWFrT25UaHJvdygpKSB7CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3
UG9pbnRlcihjYWxsRnJhbWUpLCAiIGZvciBjb2RlIGJsb2NrICIsICpjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLCAiXG4iKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAgICAgCi0gICAgUkVMRUFT
RV9BU1NFUlQoZXhjZXB0aW9uVmFsdWUpOworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gdm0t
PmV4Y2VwdGlvbigpOworICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2VwdGlvbik7CiAgICAgVk1FbnRy
eUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwotICAgIEhhbmRsZXJJ
bmZvKiBoYW5kbGVyID0gdm0tPmludGVycHJldGVyLT51bndpbmQodm1FbnRyeUZyYW1lLCBjYWxs
RnJhbWUsIGV4Y2VwdGlvblZhbHVlKTsgLy8gVGhpcyBtYXkgdXBkYXRlIHZtRW50cnlGcmFtZSBh
bmQgY2FsbEZyYW1lLgorICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gdm0tPmludGVycHJldGVy
LT51bndpbmQodm1FbnRyeUZyYW1lLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7IC8vIFRoaXMgbWF5
IHVwZGF0ZSB2bUVudHJ5RnJhbWUgYW5kIGNhbGxGcmFtZS4KIAogICAgIHZvaWQqIGNhdGNoUm91
dGluZTsKICAgICBJbnN0cnVjdGlvbiogY2F0Y2hQQ0ZvckludGVycHJldGVyID0gMDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCShyZXZpc2lvbiAxODUx
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEV4ZWNTdGF0
ZTsKIGNsYXNzIFZNOwogCi12b2lkIGdlbmVyaWNVbndpbmQoVk0qLCBFeGVjU3RhdGUqLCBKU1Zh
bHVlIGV4Y2VwdGlvblZhbHVlKTsKK3ZvaWQgZ2VuZXJpY1Vud2luZChWTSosIEV4ZWNTdGF0ZSop
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJEZWJ1
Z2dlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIK
ICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCkBAIC05Nyw3ICs5OCw3
IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYKICNlbmRpZiAvLyBD
UFUoWDg2KQogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGV4Y2VwdGlvbgotICAgIEp1bXAgc2F3RXhj
ZXB0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9j
YXN0PGNoYXIqPih2bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpOyAKKyAgICBKdW1wIHNhd0V4Y2VwdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3Modm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwgVHJ1c3RlZEltbTMyKDApKTsKIAog
ICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgLy8gUmV0dXJuLgpAQCAtODI5LDEzICs4
MzAsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogCiAgICAgLy8gTm93IHN0b3JlIHRoZSBleGNlcHRpb24gcmV0dXJuZWQgYnkgb3BlcmF0aW9u
VGhyb3cuCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKLSAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7Ci0gICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoSlNWYWx1ZSgpLnBheWxvYWQoKSksIEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRp
b25PZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkp
OwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWUoKS50YWcoKSksIEFkZHJlc3MocmVn
VDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZz
ZXQoKSksIHJlZ1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwg
cmVnVDEpOworCisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDMsIFZN
OjpleGNlcHRpb25PZmZzZXQoKSkpOwogCiAgICAgdW5zaWduZWQgZXhjZXB0aW9uID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBlbWl0U3RvcmUoZXhjZXB0aW9uLCByZWdU
MSwgcmVnVDApOworICAgIGVtaXRTdG9yZShleGNlcHRpb24sIHJlZ1QxLCByZWdUMik7CisKKyAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgRXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOworICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QyLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKKworICAgIHVuc2lnbmVkIHRocm93
blZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBlbWl0U3RvcmUo
dGhyb3duVmFsdWUsIHJlZ1QxLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgIkJhc2ljQmxvY2tMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkNv
cGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNp
bmNsdWRlICJKU0FycmF5LmgiCkBAIC01MjksNiArNTMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhj
ZXB0aW9uT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0
KCkpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOworCisgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIEV4Y2VwdGlvbjo6dmFsdWVP
ZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1t
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4MjMsNyArMTgyMyw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvdyhFeGVj
U3QKICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwogCiAgICAg
Ly8gUmVzdWx0cyBzdG9yZWQgb3V0LW9mLWJhbmQgaW4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhy
b3csIHZtLmNhbGxGcmFtZUZvclRocm93ICYgdm0udm1FbnRyeUZyYW1lRm9yVGhyb3cKLSAgICBn
ZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSk7CisgICAgZ2VuZXJpY1Vud2lu
ZCh2bSwgZXhlYyk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25GbHVzaFdyaXRl
QmFycmllckJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKQEAgLTE4NjIsMTEg
KzE4NjIsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5pdEdsb2JhbENvCiB2b2lk
IEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihWTSogdm0sIEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQot
ICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSB2bS0+ZXhjZXB0aW9uKCk7Ci0gICAgQVNTRVJU
KGV4Y2VwdGlvblZhbHVlKTsKLSAgICAKLSAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNl
cHRpb25WYWx1ZSk7CisgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CiAgICAgQVNTRVJUKHZt
LT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKQEAgLTE4NzcsMTEgKzE4NzMsNyBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlCiAgICAgQVNTRVJUKGNhbGxl
ckZyYW1lKTsKIAogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2
bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7Ci0KLSAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gdm0tPmV4Y2VwdGlvbigpOwotICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7Ci0gICAg
Ci0gICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbGVyRnJhbWUsIGV4Y2VwdGlvblZhbHVlKTsKKyAg
ICBnZW5lcmljVW53aW5kKHZtLCBjYWxsZXJGcmFtZSk7CiAgICAgQVNTRVJUKHZtLT50YXJnZXRN
YWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKQEAgLTE4ODksOCArMTg4MSw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WTUhhbmRsZUV4Y2UKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgIGdl
bmVyaWNVbndpbmQodm0sIGV4ZWMsIHZtLT5leGNlcHRpb24oKSk7CisgICAgZ2VuZXJpY1Vud2lu
ZCh2bSwgZXhlYyk7CiB9CiAKIC8vIFRoaXMgZnVuY3Rpb24gInNob3VsZCIganVzdCB0YWtlIHRo
ZSBFeGVjU3RhdGUqLCBidXQgZG9pbmcgc28gd291bGQgbWFrZSBpdCBtb3JlIGRpZmZpY3VsdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAko
cmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksOCArMzQ5LDggQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogI2Vsc2UKICAgICBKU0ludGVyZmFjZUpJVDo6
SnVtcCBleGNlcHRpb25IYW5kbGVyID0gaml0LmJyYW5jaDMyKAogICAgICAgICBKU0ludGVyZmFj
ZUpJVDo6Tm90RXF1YWwsCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpBYnNvbHV0ZUFkZHJlc3Mo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksCi0gICAgICAg
IEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwor
ICAgICAgICBKU0ludGVyZmFjZUpJVDo6QWJzb2x1dGVBZGRyZXNzKHZtLT5hZGRyZXNzT2ZFeGNl
cHRpb24oKSksCisgICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoMCkpOwogI2Vu
ZGlmCiAKICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCShy
ZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZz
ZXRzRXh0cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1
ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAi
RGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXhl
Y3V0YWJsZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc1LDggKzEzNzUsNyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV9kCiBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfaGFuZGxlX2V4Y2VwdGlvbikKIHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMo
KTsKLSAgICBBU1NFUlQodm0uZXhjZXB0aW9uKCkpOwotICAgIGdlbmVyaWNVbndpbmQoJnZtLCBl
eGVjLCB2bS5leGNlcHRpb24oKSk7CisgICAgZ2VuZXJpY1Vud2luZCgmdm0sIGV4ZWMpOwogICAg
IExMSU5UX0VORF9JTVBMKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAx
ODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNjkzLDcgKzY5Myw3IEBAIG1hY3JvIGJyYW5j
aElmRXhjZXB0aW9uKGxhYmVsKQogICAgIGxvYWRwIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2Zy
XSwgdDMKICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKICAgICBsb2FkcCBNYXJrZWRCbG9j
azo6bV93ZWFrU2V0ICsgV2Vha1NldDo6bV92bVt0M10sIHQzCi0gICAgYmllcSBWTTo6bV9leGNl
cHRpb24gKyBUYWdPZmZzZXRbdDNdLCBFbXB0eVZhbHVlVGFnLCAubm9FeGNlcHRpb24KKyAgICBi
dGl6IFZNOjptX2V4Y2VwdGlvblt0M10sIC5ub0V4Y2VwdGlvbgogICAgIGptcCBsYWJlbAogLm5v
RXhjZXB0aW9uOgogZW5kCkBAIC0xOTUyLDE1ICsxOTUyLDIwIEBAIF9sbGludF9vcF9jYXRjaDoK
ICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKIAogICAgIGxvYWRpIFZNOjp0YXJn
ZXRJbnRlcnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQwotICAgIGxvYWRpIFZNOjptX2V4Y2VwdGlv
biArIFBheWxvYWRPZmZzZXRbdDNdLCB0MAotICAgIGxvYWRpIFZNOjptX2V4Y2VwdGlvbiArIFRh
Z09mZnNldFt0M10sIHQxCi0gICAgc3RvcmVpIDAsIFZNOjptX2V4Y2VwdGlvbiArIFBheWxvYWRP
ZmZzZXRbdDNdCi0gICAgc3RvcmVpIEVtcHR5VmFsdWVUYWcsIFZNOjptX2V4Y2VwdGlvbiArIFRh
Z09mZnNldFt0M10KKyAgICBsb2FkaSBWTTo6bV9leGNlcHRpb25bdDNdLCB0MAorICAgIHN0b3Jl
aSAwLCBWTTo6bV9leGNlcHRpb25bdDNdCiAgICAgbG9hZGkgNFtQQ10sIHQyCiAgICAgc3RvcmVp
IHQwLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDIsIDhdCisgICAgc3RvcmVpIENlbGxUYWcsIFRhZ09m
ZnNldFtjZnIsIHQyLCA4XQorCisgICAgbG9hZGkgRXhjZXB0aW9uOjptX3ZhbHVlICsgVGFnT2Zm
c2V0W3QwXSwgdDEKKyAgICBsb2FkaSBFeGNlcHRpb246Om1fdmFsdWUgKyBQYXlsb2FkT2Zmc2V0
W3QwXSwgdDAKKyAgICBsb2FkaSA4W1BDXSwgdDIKKyAgICBzdG9yZWkgdDAsIFBheWxvYWRPZmZz
ZXRbY2ZyLCB0MiwgOF0KICAgICBzdG9yZWkgdDEsIFRhZ09mZnNldFtjZnIsIHQyLCA4XQorCiAg
ICAgdHJhY2VFeGVjdXRpb24oKSAgIyBUaGlzIG5lZWRzIHRvIGJlIGhlcmUgYmVjYXVzZSB3ZSBk
b24ndCB3YW50IHRvIGNsb2JiZXIgdDAsIHQxLCB0MiwgdDMgYWJvdmUuCi0gICAgZGlzcGF0Y2go
MikKKyAgICBkaXNwYXRjaCgzKQogCiBfbGxpbnRfb3BfZW5kOgogICAgIHRyYWNlRXhlY3V0aW9u
KCkKQEAgLTIwMzgsNyArMjA0Myw3IEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1
dGFibGVPZmYKICAgICBlbmQKICAgICAKICAgICBmdW5jdGlvbkVwaWxvZ3VlKCkKLSAgICBiaW5l
cSBWTTo6bV9leGNlcHRpb24gKyBUYWdPZmZzZXRbdDNdLCBFbXB0eVZhbHVlVGFnLCAuaGFuZGxl
RXhjZXB0aW9uCisgICAgYnRpbnogVk06Om1fZXhjZXB0aW9uW3QzXSwgLmhhbmRsZUV4Y2VwdGlv
bgogICAgIHJldAogCiAuaGFuZGxlRXhjZXB0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9u
IDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xODIwLDEyICsxODIwLDE4IEBAIF9sbGludF9v
cF9jYXRjaDoKICAgICBsb2FkcCBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93W3QzXSwg
UEMKICAgICBzdWJwIFBCLCBQQwogICAgIHJzaGlmdHAgMywgUEMKKwogICAgIGxvYWRxIFZNOjpt
X2V4Y2VwdGlvblt0M10sIHQwCiAgICAgc3RvcmVxIDAsIFZNOjptX2V4Y2VwdGlvblt0M10KICAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDIpCiAgICAgc3RvcmVxIHQwLCBbY2ZyLCB0Miwg
OF0KKworICAgIGxvYWRxIEV4Y2VwdGlvbjo6bV92YWx1ZVt0MF0sIHQzCisgICAgbG9hZGlzRnJv
bUluc3RydWN0aW9uKDIsIHQyKQorICAgIHN0b3JlcSB0MywgW2NmciwgdDIsIDhdCisKICAgICB0
cmFjZUV4ZWN1dGlvbigpCi0gICAgZGlzcGF0Y2goMikKKyAgICBkaXNwYXRjaCgzKQogCiAKIF9s
bGludF9vcF9lbmQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25z
dHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxMSwxMCAr
ODExLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgVHJ5
Tm9kZTo6VHJ5Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBTdGF0ZW1lbnRO
b2RlKiB0cnlCbG9jaywgY29uc3QgSWRlbnRpZmllciYgZXhjZXB0aW9uSWRlbnQsIFN0YXRlbWVu
dE5vZGUqIGNhdGNoQmxvY2ssIFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jaykKKyAgICBpbmxp
bmUgVHJ5Tm9kZTo6VHJ5Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBTdGF0
ZW1lbnROb2RlKiB0cnlCbG9jaywgY29uc3QgSWRlbnRpZmllciYgdGhyb3duVmFsdWVJZGVudCwg
U3RhdGVtZW50Tm9kZSogY2F0Y2hCbG9jaywgU3RhdGVtZW50Tm9kZSogZmluYWxseUJsb2NrKQog
ICAgICAgICA6IFN0YXRlbWVudE5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV90cnlCbG9jayh0
cnlCbG9jaykKLSAgICAgICAgLCBtX2V4Y2VwdGlvbklkZW50KGV4Y2VwdGlvbklkZW50KQorICAg
ICAgICAsIG1fdGhyb3duVmFsdWVJZGVudCh0aHJvd25WYWx1ZUlkZW50KQogICAgICAgICAsIG1f
Y2F0Y2hCbG9jayhjYXRjaEJsb2NrKQogICAgICAgICAsIG1fZmluYWxseUJsb2NrKGZpbmFsbHlC
bG9jaykKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZp
c2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE1MTEsNyArMTUxMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKSBvdmVycmlkZTsKIAogICAgICAgICBTdGF0ZW1lbnROb2RlKiBtX3RyeUJsb2NrOwot
ICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBtX2V4Y2VwdGlvbklkZW50OworICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBtX3Rocm93blZhbHVlSWRlbnQ7CiAgICAgICAgIFN0YXRlbWVudE5vZGUq
IG1fY2F0Y2hCbG9jazsKICAgICAgICAgU3RhdGVtZW50Tm9kZSogbV9maW5hbGx5QmxvY2s7CiAg
ICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAJ
KHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkNhbGxEYXRhLmgiCiAKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0Z1bmN0aW9uLmgiCkBAIC0zOSwxNSArNDAsMTUgQEAgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBmdQogICAgIHJldHVybiBleGVjLT5pbnRlcnByZXRlcigpLT5leGVj
dXRlQ2FsbChleGVjLCBhc09iamVjdChmdW5jdGlvbk9iamVjdCksIGNhbGxUeXBlLCBjYWxsRGF0
YSwgdGhpc1ZhbHVlLCBhcmdzKTsKIH0KIAotSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRh
JiBjYWxsRGF0YSwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIEpTVmFs
dWUqIGV4Y2VwdGlvbikKK0pTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVu
Y3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBFeGNlcHRpb24qJiByZXR1
cm5lZEV4Y2VwdGlvbikKIHsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rp
b25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAg
ICAgICpleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuZWRFeGNl
cHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQorICAgIH0gZWxzZQorICAg
ICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IG51bGxwdHI7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FsbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWxsRGF0YS5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWxsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQXJnTGlzdDsKK2NsYXNzIEV4Y2VwdGlvbjsKIGNs
YXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKIGNsYXNzIEpTT2JqZWN0
OwpAQCAtNTgsNyArNTksNyBAQCB1bmlvbiBDYWxsRGF0YSB7CiB9OwogCiBKU19FWFBPUlRfUFJJ
VkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2Fs
bFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KTsKLUpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqLCBKU1ZhbHVlIGZ1
bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUqIGV4Y2VwdGlvbik7CitKU19FWFBPUlRfUFJJVkFU
RSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5
cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmLCBF
eGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJDYWxsRnJh
bWUuaCIKICNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCkBAIC02MCwxOSArNjEs
MTggQEAgYm9vbCBjaGVja1N5bnRheChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZAogICAgICAgICBK
U1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdCwgSlNQYXJzZXJDb2RlVHlwZTo6UHJvZ3JhbSwg
ZXJyb3IpOwogfQogCi1KU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSogcmV0dXJuZWRFeGNl
cHRpb24pCitKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgRXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRp
b24pCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
ZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNT
dHJpbmdUYWJsZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+dm0oKS5pc0NvbGxlY3Rv
ckJ1c3koKSk7CisgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBudWxscHRyOwogCiAgICAgQ29kZVBy
b2ZpbGluZyBwcm9maWxlKHNvdXJjZSk7CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3Jh
bSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsKICAgICBpZiAoIXBy
b2dyYW0pIHsKLSAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAgICAgICAgKnJl
dHVybmVkRXhjZXB0aW9uID0gZXhlYy0+dm0oKS5leGNlcHRpb24oKTsKLQorICAgICAgICByZXR1
cm5lZEV4Y2VwdGlvbiA9IGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCk7CiAgICAgICAgIGV4ZWMtPnZt
KCkuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQpAQCAtODMsOSArODMsNyBAQCBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKHBy
b2dyYW0sIGV4ZWMsIHRoaXNPYmopOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikKLSAgICAgICAgICAgICpyZXR1cm5lZEV4
Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotCisgICAgICAgIHJldHVybmVkRXhjZXB0aW9u
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsOCBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7
Ci0gICAgCisKK2NsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTU2Nv
cGU7CiBjbGFzcyBQYXJzZXJFcnJvcjsKQEAgLTM1LDcgKzM2LDEyIEBAIGNsYXNzIFZNOwogCiBK
U19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNrU3ludGF4KFZNJiwgY29uc3QgU291cmNlQ29kZSYs
IFBhcnNlckVycm9yJik7CiBKU19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNrU3ludGF4KEV4ZWNT
dGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKLUpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29k
ZSYsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZSgpLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAw
KTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgY29uc3Qg
U291cmNlQ29kZSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2Vw
dGlvbik7CitpbmxpbmUgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZUNvZGUsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZSgpKQorewor
ICAgIEV4Y2VwdGlvbiogdW51c2VkOworICAgIHJldHVybiBldmFsdWF0ZShleGVjLCBzb3VyY2VD
b2RlLCB0aGlzVmFsdWUsIHVudXNlZCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgJKHJldmlzaW9uIDE4NTExMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc2LDYgKzc2LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93VHlwZUVycgog
SlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93U3ludGF4RXJyb3IoRXhlY1N0YXRlKik7
CiAKIC8vIENvbnZlbmllbmNlIHdyYXBwZXJzLCB3cmFwIHJlc3VsdCBhcyBhbiBFbmNvZGVkSlNW
YWx1ZS4KK2lubGluZSB2b2lkIHRocm93Vk1FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlv
biogZXhjZXB0aW9uKSB7IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
KTsgfQogaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1FcnJvcihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgZXJyb3IpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93
RXhjZXB0aW9uKGV4ZWMsIGVycm9yKSk7IH0KIGlubGluZSBFbmNvZGVkSlNWYWx1ZSB0aHJvd1ZN
VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
VHlwZUVycm9yKGV4ZWMpKTsgfQogaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1UeXBlRXJy
b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgeyByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSkpOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
b25zdCBDbGFzc0luZm8gRXhjZXB0aW9uOjpzX2luZm8gPSB7ICJFeGNlcHRpb24iLCAmQmFzZTo6
c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEV4Y2VwdGlvbikgfTsKKworRXhjZXB0aW9u
KiBFeGNlcHRpb246OmNyZWF0ZShWTSYgdm0sIEpTVmFsdWUgdGhyb3duVmFsdWUpCit7CisgICAg
RXhjZXB0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFeGNlcHRpb24+
KHZtLmhlYXApKSBFeGNlcHRpb24odm0sIHRocm93blZhbHVlKTsKKyAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEV4Y2VwdGlvbjo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzdGF0
aWNfY2FzdDxFeGNlcHRpb24qPihjZWxsKTsKKyAgICBleGNlcHRpb24tPkV4Y2VwdGlvbjo6fkV4
Y2VwdGlvbigpOworfQorCitTdHJ1Y3R1cmUqIEV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7
CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2
b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIEV4Y2VwdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxFeGNlcHRpb24q
PihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAg
IGlmICghdGhpc09iamVjdC0+bV92YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdGhp
c09iamVjdC0+bV92YWx1ZS5nZXQoKS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3ZhbHVlKTsKK30KKworRXhjZXB0aW9uOjpFeGNl
cHRpb24oVk0mIHZtLCBKU1ZhbHVlIHRocm93blZhbHVlKQorICAgIDogQmFzZSh2bSwgdm0uZXhj
ZXB0aW9uU3RydWN0dXJlLmdldCgpKQoreworICAgIG1fdmFsdWUuc2V0KHZtLCB0aGlzLCB0aHJv
d25WYWx1ZSk7CisKKyAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKKyAgICB2bS5p
bnRlcnByZXRlci0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlKTsKKyAgICBtX3N0YWNrID0gUmVm
Q291bnRlZEFycmF5PFN0YWNrRnJhbWU+KHN0YWNrVHJhY2UpOworfQorCitFeGNlcHRpb246On5F
eGNlcHRpb24oKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRXhjZXB0aW9uX2gKKyNkZWZpbmUgRXhjZXB0aW9uX2gKKworI2luY2x1ZGUgIkludGVy
cHJldGVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKyAgICAKK2NsYXNzIEV4Y2VwdGlvbiA6IHB1YmxpYyBKU09iamVjdCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU09iamVjdCBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFn
czsKKworICAgIHN0YXRpYyBFeGNlcHRpb24qIGNyZWF0ZShWTSYsIEpTVmFsdWUgdGhyb3duVmFs
dWUpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Cisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIHN0YXRpYyBwdHJkaWZmX3QgdmFs
dWVPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGNlcHRp
b24sIG1fdmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBFeGNlcHRpb24qIGNhc3QoSlNWYWx1
ZSBleGNlcHRpb25Bc0pTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNDYXN0PEV4Y2Vw
dGlvbio+KGV4Y2VwdGlvbkFzSlNWYWx1ZS5hc0NlbGwoKSk7CisgICAgfQorCisgICAgSlNWYWx1
ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KKyAgICBjb25zdCBSZWZD
b3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIHN0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjazsg
fQorCisgICAgYm9vbCBkaWROb3RpZnlJbnNwZWN0b3JPZlRocm93KCkgY29uc3QgeyByZXR1cm4g
bV9kaWROb3RpZnlJbnNwZWN0b3JPZlRocm93OyB9CisgICAgdm9pZCBzZXREaWROb3RpZnlJbnNw
ZWN0b3JPZlRocm93KCkgeyBtX2RpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3cgPSB0cnVlOyB9CisK
KyAgICB+RXhjZXB0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgRXhjZXB0aW9uKFZNJiwgSlNWYWx1
ZSB0aHJvd25WYWx1ZSk7CisKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKKyAg
ICBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4gbV9zdGFjazsKKyAgICBib29sIG1fZGlkTm90
aWZ5SW5zcGVjdG9yT2ZUaHJvdyB7IGZhbHNlIH07CisKKyAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
eGNlcHRpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uSGVscGVycy5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1l
LmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU05v
dEFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTU5LDE3ICs2MCwxMSBA
QCBKU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwCiAgICAgcmV0dXJuIFRl
cm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKCp2bSk7CiB9CiAKLWJvb2wgaXNUZXJtaW5h
dGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTT2JqZWN0KiBvYmplY3QpCitib29sIGlzVGVybWluYXRl
ZEV4ZWN1dGlvbkV4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2VwdGlvbikKIHsKLSAgICByZXR1cm4g
b2JqZWN0LT5pbmhlcml0cyhUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmluZm8oKSk7CisgICAg
cmV0dXJuIGV4Y2VwdGlvbi0+dmFsdWUoKS5pbmhlcml0cyhUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3I6OmluZm8oKSk7CiB9CiAKLWJvb2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKFRlcm1pbmF0ZWRFeGVj
dXRpb25FcnJvcjo6aW5mbygpKTsKLX0KLQotCiBKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxv
d0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIk1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkLiIpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbkhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIHR5cGVkZWYgSlNPYmplY3QqICgqRXJyb3JGYWN0b3J5KShFeGVjU3RhdGUq
LCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CiAKIEpTT2Jq
ZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKFZNKik7Ci1ib29sIGlzVGVy
bWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU09iamVjdCopOwotSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNWYWx1ZSk7CitKU19FWFBPUlRf
UFJJVkFURSBib29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihFeGNlcHRpb24qKTsK
IEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqLCBKU1Zh
bHVlLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CiBKU19F
WFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0
ZSopOwogSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2
ICsyNCw3IEBACiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAKICNpbmNsdWRlICJFcnJvci5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC03NSw3ICs3
Niw3IEBAIEpTVmFsdWUgY2FsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAvLyBG
SVhNRTogU29tZSBjYWxsZXJzIG1heSBpbnZva2UgZ2V0KCkgd2l0aG91dCBjaGVja2luZyBmb3Ig
YW4gZXhjZXB0aW9uIGZpcnN0LgogICAgIC8vIFdlIHdvcmsgYXJvdW5kIHRoYXQgYnkgY2hlY2tp
bmcgaGVyZS4KICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBl
eGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1
ZSgpOwogCiAgICAgSlNPYmplY3QqIGdldHRlciA9IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihnZXR0
ZXJTZXR0ZXIpLT5nZXR0ZXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODUxMTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIEpTVmFsdWUgaXRlcmF0b3JTdGVwKEV4ZWNT
dGF0ZSogZXhlYywgSlMKIAogdm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBpdGVyYXRvcikKIHsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24q
IGV4Y2VwdGlvbiA9IG51bGxwdHI7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAg
ICAgICAgIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwpAQCAtOTksNyArOTksNyBAQCB2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChyZXR1cm5GdW5jdGlv
bi5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkKKyAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNyw3ICsx
MDcsNyBAQCB2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgQ2Fs
bERhdGEgcmV0dXJuRnVuY3Rpb25DYWxsRGF0YTsKICAgICBDYWxsVHlwZSByZXR1cm5GdW5jdGlv
bkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmV0dXJuRnVuY3Rpb24sIHJldHVybkZ1bmN0aW9uQ2Fs
bERhdGEpOwogICAgIGlmIChyZXR1cm5GdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkg
ewotICAgICAgICBpZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIGlmIChleGNlcHRp
b24pCiAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwpAQCAt
MTE3LDcgKzExNyw3IEBAIHZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXR1cm5GdW5jdGlvbkFyZ3VtZW50czsKICAgICBK
U1ZhbHVlIGlubmVyUmVzdWx0ID0gY2FsbChleGVjLCByZXR1cm5GdW5jdGlvbiwgcmV0dXJuRnVu
Y3Rpb25DYWxsVHlwZSwgcmV0dXJuRnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0b3IsIHJldHVybkZ1
bmN0aW9uQXJndW1lbnRzKTsKIAotICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkgeworICAg
IGlmIChleGNlcHRpb24pIHsKICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBleGNlcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVk
ZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiR2V0
dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgiCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKICNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgogI2luY2x1
ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgpAQCAt
MTM2LDcgKzEzNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMK
IAogICAgIC8vIDE0LiBJZiByZXN1bHQgaXMgYW4gYWJydXB0IGNvbXBsZXRpb24sIGNhbGwgUHJv
bWlzZVJlamVjdChwcm9taXNlLCByZXN1bHQuW1t2YWx1ZV1dKS4KICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRp
b24oKTsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKS0+dmFs
dWUoKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAgICAgICBwcm9taXNl
LT5yZWplY3Qodm0sIGV4Y2VwdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3BwCShyZXZpc2lvbiAxODUxMTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKICNp
bmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
UHJvbWlzZS5oIgpAQCAtMTUwLDcgKzE1MSw3IEBAIFRoZW5hYmxlU3RhdHVzIHVwZGF0ZURlZmVy
cmVkRnJvbVBvdGVudGkKICAgICAgICAgLy8gaS4gTGV0ICdyZWplY3RSZXN1bHQnIGJlIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kIG9mCiAgICAgICAg
IC8vICAgIGRlZmVycmVkLltbUmVqZWN0XV0gd2l0aCB1bmRlZmluZWQgYXMgdGhpc0FyZ3VtZW50
IGFuZCBhIExpc3QgY29udGFpbmluZwogICAgICAgICAvLyAgICB0aGVuLltbdmFsdWVdXSBhcyBh
cmd1bWVudHNMaXN0LgotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlv
bigpOworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1
ZSgpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgICAgIHBlcmZvcm1E
ZWZlcnJlZFJlamVjdChleGVjLCBkZWZlcnJlZCwgZXhjZXB0aW9uKTsKQEAgLTE4NSw3ICsxODYs
NyBAQCBUaGVuYWJsZVN0YXR1cyB1cGRhdGVEZWZlcnJlZEZyb21Qb3RlbnRpCiAgICAgICAgIC8v
IGkuIExldCAncmVqZWN0UmVzdWx0JyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ2Fs
bF1dIGludGVybmFsIG1ldGhvZCBvZgogICAgICAgICAvLyAgICBkZWZlcnJlZC5bW1JlamVjdF1d
IHdpdGggdW5kZWZpbmVkIGFzIHRoaXNBcmd1bWVudCBhbmQgYSBMaXN0IGNvbnRhaW5pbmcKICAg
ICAgICAgLy8gICAgdGhlbkNhbGxSZXN1bHQuW1t2YWx1ZV1dIGFzIGFyZ3VtZW50c0xpc3QuCi0g
ICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIEpT
VmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7CiAgICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgcGVyZm9ybURlZmVycmVkUmVqZWN0KGV4
ZWMsIGRlZmVycmVkLCBleGNlcHRpb24pOwpAQCAtMjI4LDcgKzIyOSw3IEBAIHZvaWQgcGVyZm9y
bURlZmVycmVkUmVqZWN0KEV4ZWNTdGF0ZSogZXgKIEpTVmFsdWUgYWJydXB0UmVqZWN0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkKQogewogICAgIEFTU0VS
VChleGVjLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgSlNWYWx1ZSBhcmd1bWVudCA9IGV4ZWMtPmV4
Y2VwdGlvbigpOworICAgIEpTVmFsdWUgYXJndW1lbnQgPSBleGVjLT5leGNlcHRpb24oKS0+dmFs
dWUoKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgLy8gaS4gTGV0ICdyZWpl
Y3RSZXN1bHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwg
bWV0aG9kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VSZWFj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9taXNlUmVhY3Rpb24uY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb21pc2VSZWFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKICNpbmNsdWRlICJFcnJvci5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCkBA
IC04OCw3ICs4OSw3IEBAIHZvaWQgRXhlY3V0ZVByb21pc2VSZWFjdGlvbk1pY3JvdGFzazo6cnUK
ICAgICAvLyAgICBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YgZGVmZXJyZWQuW1tSZWplY3Rd
XSBwYXNzaW5nIHVuZGVmaW5lZCBhcyB0aGlzQXJndW1lbnQKICAgICAvLyAgICBhbmQgYSBMaXN0
IGNvbnRhaW5pbmcgaGFuZGxlclJlc3VsdC5bW3ZhbHVlXV0gYXMgYXJndW1lbnRzTGlzdC4KICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24g
PSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5l
eGNlcHRpb24oKS0+dmFsdWUoKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAog
ICAgICAgICBwZXJmb3JtRGVmZXJyZWRSZWplY3QoZXhlYywgZGVmZXJyZWQsIGV4Y2VwdGlvbik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxODUxMTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRp
c2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkVycm9ySW5zdGFuY2UuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb24uaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCkBAIC0yMzUsNiArMjM2
LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIHdlYWtN
YXBEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgV2Vha01hcERhdGE6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFZhbHVlU3RydWN0dXJlLnNldCgqdGhp
cywgSW5mZXJyZWRWYWx1ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwog
ICAgIGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlvblJhcmVEYXRh
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgZXhjZXB0aW9uU3Ry
dWN0dXJlLnNldCgqdGhpcywgRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAjaWYgRU5BQkxFKFBST01JU0VTKQogICAgIHByb21pc2VEZWZlcnJlZFN0cnVj
dHVyZS5zZXQoKnRoaXMsIEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvbWlzZVJlYWN0aW9uU3RydWN0dXJlLnNldCgqdGhpcywg
SlNQcm9taXNlUmVhY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
QEAgLTU0NSw3ICs1NDcsNyBAQCB2b2lkIFZNOjpyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpCiAg
ICAgaGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQogCi1KU1ZhbHVlIFZNOjp0aHJvd0V4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXJyb3IpCit2b2lkIFZNOjp0aHJvd0V4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIGlmIChP
cHRpb25zOjpicmVha09uVGhyb3coKSkgewogICAgICAgICBkYXRhTG9nKCJJbiBjYWxsIGZyYW1l
ICIsIFJhd1BvaW50ZXIoZXhlYyksICIgZm9yIGNvZGUgYmxvY2sgIiwgKmV4ZWMtPmNvZGVCbG9j
aygpLCAiXG4iKTsKQEAgLTU1MywzNyArNTU1LDI0IEBAIEpTVmFsdWUgVk06OnRocm93RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXgKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGV4ZWMgPT0gdG9wQ2Fs
bEZyYW1lIHx8IGV4ZWMgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCkgfHwgZXhlYyA9PSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7
Ci0gICAgCi0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Ci0gICAgaW50ZXJwcmV0
ZXItPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7Ci0gICAgbV9leGNlcHRpb25TdGFjayA9IFJl
ZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPihzdGFja1RyYWNlKTsKLSAgICBtX2V4Y2VwdGlvbiA9
IGVycm9yOwotCi0gICAgcmV0dXJuIGVycm9yOwotfQotICAgIAotSlNPYmplY3QqIFZNOjp0aHJv
d0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBlcnJvcikKLXsKLSAgICByZXR1
cm4gYXNPYmplY3QodGhyb3dFeGNlcHRpb24oZXhlYywgSlNWYWx1ZShlcnJvcikpKTsKLX0KLXZv
aWQgVk06OmdldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJy
YXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKQotewotICAgIGV4Y2VwdGlvbiA9IG1fZXhj
ZXB0aW9uOwotICAgIGV4Y2VwdGlvblN0YWNrID0gbV9leGNlcHRpb25TdGFjazsKLX0KLXZvaWQg
Vk06OnNldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJyYXk8
U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKQotewotICAgIG1fZXhjZXB0aW9uID0gZXhjZXB0
aW9uOwotICAgIG1fZXhjZXB0aW9uU3RhY2sgPSBleGNlcHRpb25TdGFjazsKKyAgICBzZXRFeGNl
cHRpb24oZXhjZXB0aW9uKTsKIH0KIAotdm9pZCBWTTo6Y2xlYXJFeGNlcHRpb24oKQorSlNWYWx1
ZSBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRocm93blZhbHVl
KQogewotICAgIG1fZXhjZXB0aW9uID0gSlNWYWx1ZSgpOworICAgIEV4Y2VwdGlvbiogZXhjZXB0
aW9uOworICAgIGlmICh0aHJvd25WYWx1ZS5pc0NlbGwoKSAmJiB0aHJvd25WYWx1ZS5hc0NlbGwo
KS0+c3RydWN0dXJlKCkgPT0gZXhjZXB0aW9uU3RydWN0dXJlLmdldCgpKQorICAgICAgICBleGNl
cHRpb24gPSBqc0Nhc3Q8RXhjZXB0aW9uKj4odGhyb3duVmFsdWUuYXNDZWxsKCkpOworICAgIGVs
c2UKKyAgICAgICAgZXhjZXB0aW9uID0gRXhjZXB0aW9uOjpjcmVhdGUoKnRoaXMsIHRocm93blZh
bHVlKTsKKworICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgcmV0dXJu
IEpTVmFsdWUoZXhjZXB0aW9uKTsKIH0KLXZvaWQgVk06OiBjbGVhckV4Y2VwdGlvblN0YWNrKCkK
KworSlNPYmplY3QqIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBlcnJvcikKIHsKLSAgICBtX2V4Y2VwdGlvblN0YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNr
RnJhbWU+KCk7CisgICAgcmV0dXJuIGFzT2JqZWN0KHRocm93RXhjZXB0aW9uKGV4ZWMsIEpTVmFs
dWUoZXJyb3IpKSk7CiB9CiAKIHZvaWQgVk06OnNldFN0YWNrUG9pbnRlckF0Vk1FbnRyeSh2b2lk
KiBzcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsNyArNTgsNiBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KICNpbmNsdWRlIDx3
dGYvU3RhY2tCb3VuZHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4K
QEAgLTc4LDYgKzc3LDcgQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29kZUNhY2hlOwogY2xh
c3MgQ29tbW9uSWRlbnRpZmllcnM7CiBjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBFeGNlcHRpb247
CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIFR5cGVQcm9maWxlcjsKIGNsYXNzIFR5cGVQcm9m
aWxlckxvZzsKQEAgLTI3NCw2ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRW
YWx1ZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvblJhcmVEYXRhU3Ry
dWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV4Y2VwdGlvblN0cnVjdHVyZTsKICNpZiBF
TkFCTEUoUFJPTUlTRVMpCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZURlZmVycmVkU3Ry
dWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VSZWFjdGlvblN0cnVjdHVyZTsK
QEAgLTM3MiwxNCArMzczLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihWTSwgdGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwogICAgIH0KIAotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgY2xlYXJFeGNlcHRpb24oKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGNsZWFyRXhjZXB0aW9uU3RhY2soKTsKLSAgICB2b2lkIGdldEV4Y2VwdGlvbkluZm8oSlNW
YWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0
YWNrKTsKLSAgICB2b2lkIHNldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZD
b3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKTsKLSAgICBKU1ZhbHVlIGV4
Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9Ci0gICAgSlNWYWx1ZSogYWRk
cmVzc09mRXhjZXB0aW9uKCkgeyByZXR1cm4gJm1fZXhjZXB0aW9uOyB9Ci0gICAgY29uc3QgUmVm
Q291bnRlZEFycmF5PFN0YWNrRnJhbWU+JiBleGNlcHRpb25TdGFjaygpIGNvbnN0IHsgcmV0dXJu
IG1fZXhjZXB0aW9uU3RhY2s7IH0KKyAgICB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyBtX2V4Y2Vw
dGlvbiA9IG51bGxwdHI7IH0KKyAgICB2b2lkIHNldEV4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2Vw
dGlvbikgeyBtX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsgfQogCisgICAgRXhjZXB0aW9uKiBleGNl
cHRpb24oKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbjsgfQorICAgIEpTQ2VsbCoqIGFkZHJl
c3NPZkV4Y2VwdGlvbigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKio+KCZtX2V4
Y2VwdGlvbik7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhyb3dFeGNlcHRpb24o
RXhlY1N0YXRlKiwgRXhjZXB0aW9uKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0
aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU09iamVjdCogdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIApAQCAt
NTY5LDEyICs1NjksMTEgQEAgcHJpdmF0ZToKICNlbmRpZgogI2VuZGlmCiAgICAgdm9pZCogbV9s
YXN0U3RhY2tUb3A7Ci0gICAgSlNWYWx1ZSBtX2V4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIG1f
ZXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9pbkRlZmluZU93blByb3BlcnR5Owog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDb2RlQ2FjaGU+IG1fY29kZUNhY2hlOwogICAgIExlZ2FjeVBy
b2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4
ZWN1dGFibGVzPiBtX2J1aWx0aW5FeGVjdXRhYmxlczsKLSAgICBSZWZDb3VudGVkQXJyYXk8U3Rh
Y2tGcmFtZT4gbV9leGNlcHRpb25TdGFjazsKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFdh
dGNocG9pbnRTZXQ+PiBtX2ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludFNldHM7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFR5cGVQcm9maWxlcj4gbV90eXBlUHJvZmlsZXI7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFR5cGVQcm9maWxlckxvZz4gbV90eXBlUHJvZmlsZXJMb2c7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHJldmlzaW9uIDE4NTEx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDYgQEAgVk1FbnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUo
Vk0mIHZtLCBKU0dsbwogICAgICAgICAvLyBvYnNlcnZlIHRpbWUgeG9uZSBjaGFuZ2VzLgogICAg
ICAgICB2bS5yZXNldERhdGVDYWNoZSgpOwogICAgIH0KLQotICAgIC8vIENsZWFyIHRoZSBjYXB0
dXJlZCBleGNlcHRpb24gc3RhY2sgYmV0d2VlbiBlbnRyaWVzCi0gICAgdm0uY2xlYXJFeGNlcHRp
b25TdGFjaygpOwogfQogCiB2b2lkIFZNRW50cnlTY29wZTo6c2V0RW50cnlTY29wZURpZFBvcExp
c3RlbmVyKHZvaWQqIGtleSwgRW50cnlTY29wZURpZFBvcExpc3RlbmVyIGxpc3RlbmVyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9FeGNlcHRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0V4
Y2VwdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9FeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNp
Zm5kZWYgV2ViQ29yZV9GV0RfRXhjZXB0aW9uX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfRXhjZXB0
aW9uX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9FeGNlcHRpb24uaD4KKyNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0Rh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMCArNzMsMTAgQEAgSlNWYWx1ZSBKU0NhbGxi
YWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSgogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9u
Q2FsbChjb250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRp
b247CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjb250
ZXh0LT5pc0RvY3VtZW50KCkKLSAgICAgICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwo
ZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCAmZXhj
ZXB0aW9uKQotICAgICAgICA6IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsICZleGNlcHRpb24pOworICAgICAgICA/IEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0
aGlzVmFsdWUsIGFyZ3MsIGV4Y2VwdGlvbikKKyAgICAgICAgOiBKU0M6OmNhbGwoZXhlYywgZnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pOwog
CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCBj
b250ZXh0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0
aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Myw4ICs5Myw4IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6
bG9va3VwTmEKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5k
KGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHByZWZpeCkpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRp
b247Ci0gICAgSlNWYWx1ZSByZXR2YWwgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhl
YywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV9jdXN0b21SZXNvbHZlci5nZXQoKSwg
YXJncywgJmV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CisgICAgSlNWYWx1
ZSByZXR2YWwgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwgbV9jdXN0b21SZXNvbHZlci5nZXQoKSwgYXJncywgZXhjZXB0aW9u
KTsKIAogICAgIFN0cmluZyByZXN1bHQ7CiAgICAgaWYgKGV4Y2VwdGlvbikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNl
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JI
YW5kbGluZ1Njb3BlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KICNpbmNsdWRl
IDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rp
b24uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTEzOCw3ICsxMzksNyBAQCBKU0M6OkpTVmFs
dWUganNBcnJheShKU0M6OkV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0
QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0LCBsaXN0KTsKIH0KIAotdm9pZCByZXBvcnRFeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBj
YWNoZWRTY3JpcHQpCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2Vw
dGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChleGVjLT52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwog
ICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSkKQEAgLTE0
OCw3ICsxNDksNiBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAK
ICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0
YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4Q2Fs
bFN0YWNrU2l6ZVRvQ2FwdHVyZSkpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAg
ZXhlYy0+Y2xlYXJTdXBwbGVtZW50YXJ5RXhjZXB0aW9uSW5mbygpOwogCiAgICAgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSBq
c0R5bmFtaWNDYXN0PEpTRE9NV2luZG93Kj4oZ2xvYmFsT2JqZWN0KSkgewpAQCAtMTY2LDE0ICsx
NjYsMTMgQEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIH0K
IAogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKEV4Y2VwdGlvbkJhc2UqIGV4Y2Vw
dGlvbkJhc2UgPSB0b0V4Y2VwdGlvbkJhc2UoZXhjZXB0aW9uKSkKKyAgICBpZiAoRXhjZXB0aW9u
QmFzZSogZXhjZXB0aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFzZShleGNlcHRpb24tPnZhbHVlKCkp
KQogICAgICAgICBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb25CYXNlLT5tZXNzYWdlKCkgKyAiOiAi
ICArIGV4Y2VwdGlvbkJhc2UtPmRlc2NyaXB0aW9uKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8v
IEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNwZWN0b3I6IFdlYkNv
cmU6OnJlcG9ydEV4Y2VwdGlvbiBzaG91bGQgbm90IGV2YWx1YXRlIEphdmFTY3JpcHQgaGFuZGxp
bmcgZXhjZXB0aW9ucwogICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY3VzdG9uIGV4Y2VwdGlvbiBv
YmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5IGFuZCBnZXQgYSBuaWNlIHN0cmluZyBy
ZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4KLSAgICAgICAgZXJyb3JNZXNzYWdlID0g
ZXhjZXB0aW9uLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgZXJyb3JNZXNz
YWdlID0gZXhjZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJTdXBwbGVt
ZW50YXJ5RXhjZXB0aW9uSW5mbygpOwogICAgIH0KIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKQEAgLTE4Miw3ICsxODEsNyBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTCiAKIHZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAg
ICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNp
b24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0Nyw3ICsyNDcsNyBAQCB2b2lkIGFkZEltcHVyZVByb3BlcnR5
KGNvbnN0IEF0b21pY1N0cmluCiAKIGNvbnN0IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVG
b3JHbG9iYWxEYXRhKEpTQzo6Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUp
OwogCi1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogPSBudWxscHRyKTsKK1dFQkNP
UkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNl
cHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7CiB2b2lkIHJlcG9ydEN1cnJlbnRFeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKIAogSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OCwxMCArOTgsMTAgQEAgdm9pZCBKU0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQo
U2NyaXB0RQogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIFZN
RW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCB2bS5lbnRyeVNjb3BlID8gdm0uZW50cnlTY29wZS0+
Z2xvYmFsT2JqZWN0KCkgOiBnbG9iYWxPYmplY3QpOwogCi0gICAgICAgIEpTVmFsdWUgZXhjZXB0
aW9uOworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICAgICAgSlNWYWx1ZSByZXR1
cm5WYWx1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKQotICAgICAgICAg
ICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywganNGdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ3MsICZleGNlcHRpb24pCi0gICAgICAgICAg
ICA6IEpTQzo6Y2FsbChleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2Jh
bE9iamVjdCwgYXJncywgJmV4Y2VwdGlvbik7CisgICAgICAgICAgICA/IEpTTWFpblRocmVhZEV4
ZWNTdGF0ZTo6Y2FsbChleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2Jh
bE9iamVjdCwgYXJncywgZXhjZXB0aW9uKQorICAgICAgICAgICAgOiBKU0M6OmNhbGwoZXhlYywg
anNGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ3MsIGV4Y2Vw
dGlvbik7CiAKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRDdXJyZW50RXZlbnQoc2F2ZWRFdmVu
dCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDEwICsxMjQsMTAgQEAg
dm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpp
bnN0cnVtZW50RnVuY3Rpb25DYWxsKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNhbGxUeXBlLCBj
YWxsRGF0YSk7CiAKICAgICAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBoYW5kbGVFdmVudEZ1bmN0
aW9uID09IGpzRnVuY3Rpb24gPyB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgZXZlbnQtPmN1cnJl
bnRUYXJnZXQoKSkgOiBqc0Z1bmN0aW9uOwotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAg
ICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgICAgIEpTVmFsdWUgcmV0dmFsID0gc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpCi0gICAgICAgICAgICA/IEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgJmV4Y2VwdGlvbikKLSAgICAgICAgICAgIDogSlND
OjpjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhp
c1ZhbHVlLCBhcmdzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgICAgID8gSlNNYWluVGhyZWFkRXhl
Y1N0YXRlOjpjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pCisgICAgICAgICAgICA6IEpTQzo6Y2FsbChl
eGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwg
YXJncywgZXhjZXB0aW9uKTsKIAogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZENhbGxGdW5jdGlvbihjb29raWUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0
ZS5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE4ICs0NiwxOCBA
QCB2b2lkIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZGlkTGVhdmVTY3JpCiAgICAgTXV0YXRpb25P
YnNlcnZlcjo6ZGVsaXZlckFsbE11dGF0aW9ucygpOwogfQogCi1KU0M6OkpTVmFsdWUgZnVuY3Rp
b25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpD
YWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJn
TGlzdCYgYXJncywgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCitKU0M6OkpTVmFsdWUgZnVuY3Rp
b25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpD
YWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJn
TGlzdCYgYXJncywgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBp
ZiAoaXNNYWluVGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBKU01haW5UaHJlYWRFeGVjU3RhdGU6
OmNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVl
LCBhcmdzLCBleGNlcHRpb24pOwotICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb25P
YmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pOwor
ICAgICAgICByZXR1cm4gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9u
T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgcmV0dXJuZWRFeGNl
cHRpb24pOworICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGNhbGxU
eXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCByZXR1cm5lZEV4Y2VwdGlvbik7CiB9CiAK
LUpTQzo6SlNWYWx1ZSBldmFsdWF0ZUhhbmRsZXJGcm9tQW55VGhyZWFkKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCitKU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5k
bGVyRnJvbUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VD
b2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0
dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgaWYgKGlzTWFpblRocmVhZCgpKQotICAgICAgICByZXR1
cm4gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1
ZSwgZXhjZXB0aW9uKTsKLSAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRo
aXNWYWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTTWFpblRocmVhZEV4ZWNTdGF0
ZTo6ZXZhbHVhdGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIHJldHVybmVkRXhjZXB0aW9uKTsK
KyAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1ZSwgcmV0dXJu
ZWRFeGNlcHRpb24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE2ICs1MCwyMiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBzX21haW5UaHJlYWRTdGF0ZTsKICAgICB9OwogICAgIAotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY2FsbChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1
bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRh
JiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBh
cmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbikKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNh
bGwoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlND
OjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpFeGNlcHRp
b24qJiByZXR1cm5lZEV4Y2VwdGlvbikKICAgICB7CiAgICAgICAgIEpTTWFpblRocmVhZEV4ZWNT
dGF0ZSBjdXJyZW50U3RhdGUoZXhlYyk7Ci0gICAgICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywg
ZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNl
cHRpb24pOworICAgICAgICByZXR1cm4gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBj
YWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgcmV0dXJuZWRFeGNlcHRpb24pOwog
ICAgIH07CiAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBl
dmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3Vy
Y2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNl
cHRpb24pCiAgICAgewogICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGUgY3VycmVudFN0YXRl
KGV4ZWMpOwotICAgICAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNW
YWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6ZXZhbHVhdGUoZXhlYywgc291
cmNlLCB0aGlzVmFsdWUsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICB9OworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpT
b3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUgPSBKU0M6OkpTVmFsdWUo
KSkKKyAgICB7CisgICAgICAgIEpTQzo6RXhjZXB0aW9uKiB1bnVzZWQ7CisgICAgICAgIHJldHVy
biBldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1ZSwgdW51c2VkKTsKICAgICB9OwogCiAg
ICAgc3RhdGljIHZvaWQgcnVuVGFzayhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpNaWNyb3Rh
c2smIHRhc2spCkBAIC0xMjEsOCArMTI3LDggQEAgcHJpdmF0ZToKICAgICBKU0M6OkV4ZWNTdGF0
ZSogbV9wcmV2aW91c1N0YXRlOwogfTsKIAotSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uQ2FsbEhhbmRs
ZXJGcm9tQW55VGhyZWFkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2Jq
ZWN0LCBKU0M6OkNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiwgSlNDOjpKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlv
bik7Ci1KU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5kbGVyRnJvbUFueVRocmVhZChKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpT
Qzo6SlNWYWx1ZSogZXhjZXB0aW9uKTsKK0pTQzo6SlNWYWx1ZSBmdW5jdGlvbkNhbGxIYW5kbGVy
RnJvbUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgSlNDOjpDYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYsIEpTQzo6SlNWYWx1ZSB0aGlz
VmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5l
ZEV4Y2VwdGlvbik7CitKU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5kbGVyRnJvbUFueVRocmVhZChK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIEpTQzo6SlNWYWx1ZSB0aGlz
VmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pOwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFE
ZXZpY2VzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lZGlhRGV2aWNlc0N1c3RvbS5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFEZXZpY2VzQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgogI2luY2x1ZGUg
IkpTTWVkaWFTdHJlYW0uaCIKICNpbmNsdWRlICJKU05hdmlnYXRvclVzZXJNZWRpYUVycm9yLmgi
CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IApAQCAtNTAsNyArNTEsOSBAQCBKU1ZhbHVlIEpTTWVkaWFEZXZpY2VzOjpnZXRVc2VyTWVkaWEo
RXhlCiAKICAgICBEaWN0aW9uYXJ5IG9wdGlvbnMoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICB3cmFwcGVyLnJlamVjdChl
eGVjLT5leGNlcHRpb24oKSk7CisgICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+
ZXhjZXB0aW9uKCk7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHdy
YXBwZXIucmVqZWN0KGV4Y2VwdGlvbi0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybiB3cmFwcGVy
LnByb21pc2UoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TXV0YXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODcsOCArODcsOCBAQCB2b2lkIEpTTXV0YXRpb25DYWxsYmFjazo6Y2FsbChjb25zdCBW
ZWN0CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjppbnN0cnVtZW50RnVuY3Rpb25DYWxsKGNvbnRleHQsIGNhbGxUeXBl
LCBjYWxsRGF0YSk7CiAKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICBKU01haW5UaHJlYWRF
eGVjU3RhdGU6OmNhbGwoZXhlYywgY2FsbGJhY2ssIGNhbGxUeXBlLCBjYWxsRGF0YSwganNPYnNl
cnZlciwgYXJncywgJmV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CisgICAg
SlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGNhbGxiYWNrLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGpzT2JzZXJ2ZXIsIGFyZ3MsIGV4Y2VwdGlvbik7CiAKICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihjb29raWUsIGNvbnRleHQpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZUpTU3RyZWFtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZUpTU3RyZWFtLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVKU1N0
cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGdldFByb3BlcnR5RnJvbU9iagogICAgIHJldHVybiBvYmplY3QtPmdldChleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGlkZW50aWZpZXIpKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGNhbGxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUganNGdW5j
dGlvbiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cywgSlNWYWx1
ZSogZXhjZXB0aW9uKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGNhbGxGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUganNGdW5jdGlvbiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3VtZW50cywgRXhjZXB0aW9uKiYgZXhjZXB0aW9uKQogewogICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoanNGdW5jdGlv
biwgY2FsbERhdGEpOwpAQCAtMTAwLDggKzEwMCw4IEBAIHZvaWQgUmVhZGFibGVKU1N0cmVhbTo6
U291cmNlOjpzdGFydChFeGUKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAg
ICAgYXJndW1lbnRzLmFwcGVuZChyZWFkYWJsZVN0cmVhbS5qc0NvbnRyb2xsZXIoZXhlYywgZ2xv
YmFsT2JqZWN0KCkpKTsKIAotICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgIGNhbGxGdW5jdGlv
bigmZXhlYywgc3RhcnRGdW5jdGlvbiwgbV9zb3VyY2UuZ2V0KCksIGFyZ3VtZW50cywgJmV4Y2Vw
dGlvbik7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CisgICAgY2FsbEZ1bmN0aW9uKCZleGVj
LCBzdGFydEZ1bmN0aW9uLCBtX3NvdXJjZS5nZXQoKSwgYXJndW1lbnRzLCBleGNlcHRpb24pOwog
CiAgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAgICB0aHJvd1ZNRXJyb3IoJmV4ZWMsIGV4Y2Vw
dGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFj
dGlvbi5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDExICs5OSwxMSBAQCB2
b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZUZ1bmN0aW9uSW5DCiAKICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjppbnN0
cnVtZW50RnVuY3Rpb25DYWxsKCZjb250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwogCi0gICAg
SlNWYWx1ZSBleGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgaWYgKGlz
PERvY3VtZW50Pihjb250ZXh0KSkKLSAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxs
KGV4ZWMsIG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBh
cmdzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4
ZWMsIG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdz
LCBleGNlcHRpb24pOwogICAgIGVsc2UKLSAgICAgICAgSlNDOjpjYWxsKGV4ZWMsIG1fZnVuY3Rp
b24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCAmZXhjZXB0aW9u
KTsKKyAgICAgICAgSlNDOjpjYWxsKGV4ZWMsIG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBlLCBj
YWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pOwogCiAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCAmY29udGV4dCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDkgKzE2MCw4IEBAIERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXIKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0
ZVNjcmlwdChtX2ZyYW1lLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuc3RhcnRMaW5lKCkpOwogCi0g
ICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotCi0gICAgSlNWYWx1ZSByZXR1cm5WYWx1
ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywganNTb3VyY2VDb2RlLCBz
aGVsbCwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEV4Y2VwdGlvbiogZXZhbHVhdGlvbkV4
Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRl
OjpldmFsdWF0ZShleGVjLCBqc1NvdXJjZUNvZGUsIHNoZWxsLCBldmFsdWF0aW9uRXhjZXB0aW9u
KTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRXZhbHVhdGVTY3JpcHQoY29v
a2llLCBtX2ZyYW1lKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSA8cnVudGltZS9Cb29sZWFuT2JqZWN0
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KICNpbmNsdWRlIDxydW50aW1l
L0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KICNpbmNsdWRlIDxydW50
aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIu
aD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg+CkBAIC0yNzAyLDcgKzI3
MDMsNyBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsCiAgICAgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgdmFsdWUsIG51bGxwdHIsIG51bGxwdHIpOwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAg
ICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUo
KSk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KQEAgLTI3MzIsNyArMjczMyw3IEBAIEpTVmFsdWVSZWYgU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpkZXNlcmkKICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemUoZXhlYywgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBudWxscHRyKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24g
PSB0b1JlZihleGVjLCBleGVjLT5leGNlcHRpb24oKSk7CisgICAgICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoZXhlYywgZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCkpOwogICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDcgQEAKICNpbmNsdWRlIDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KICNpbmNsdWRlIDxpbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25I
ZWxwZXJzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNMb2NrLmg+CkBAIC05OCwxNSArOTksMTUgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZShjbwogICAgIGlmIChpc0V4ZWN1dGlvbkZvcmJpZGRlbigpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBleGNlcHRpb247Ci0gICAgZXZh
bHVhdGUoc291cmNlQ29kZSwgJmV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbi5qc1ZhbHVl
KCkpIHsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKKyAgICBldmFsdWF0ZShzb3VyY2VDb2Rl
LCBleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0oKSk7Ci0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihtX3dvcmtlckdsb2JhbFNjb3Bl
V3JhcHBlci0+Z2xvYmFsRXhlYygpLCBleGNlcHRpb24uanNWYWx1ZSgpKTsKKyAgICAgICAgcmVw
b3J0RXhjZXB0aW9uKG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCksIGV4
Y2VwdGlvbik7CiAgICAgfQogfQogCi12b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlKiBleGNlcHRpb24pCit2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRl
KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0
dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgaWYgKGlzRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTExNiw4ICsxMTcsOCBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXI6OmV2YWx1YXRlKGNvCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV93b3JrZXJHbG9iYWxTY29w
ZVdyYXBwZXItPmdsb2JhbEV4ZWMoKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAot
ICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKLSAgICBKU0M6OmV2YWx1YXRlKGV4ZWMs
IHNvdXJjZUNvZGUuanNTb3VyY2VDb2RlKCksIG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5n
bG9iYWxUaGlzKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBKU0M6OkV4Y2VwdGlvbiog
ZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU0M6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZUNvZGUu
anNTb3VyY2VDb2RlKCksIG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxUaGlzKCks
IGV2YWx1YXRpb25FeGNlcHRpb24pOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBp
ZiAoKGV2YWx1YXRpb25FeGNlcHRpb24gJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9u
KGV2YWx1YXRpb25FeGNlcHRpb24pKSAKQEAgLTEzMSwxNiArMTMyLDE5IEBAIHZvaWQgV29ya2Vy
U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAw
OwogICAgICAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKICAgICAgICAgU3RyaW5nIHNvdXJjZVVS
TCA9IHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCk7Ci0gICAgICAgIGlmIChtX3dvcmtlckdsb2Jh
bFNjb3BlLT5zYW5pdGl6ZVNjcmlwdEVycm9yKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29s
dW1uTnVtYmVyLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuY2FjaGVkU2NyaXB0KCkpKQotICAgICAg
ICAgICAgKmV4Y2VwdGlvbiA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCptX3ZtLCBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZS5p
bXBsKCkpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSgqbV92bSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgICAgIGlm
IChtX3dvcmtlckdsb2JhbFNjb3BlLT5zYW5pdGl6ZVNjcmlwdEVycm9yKGVycm9yTWVzc2FnZSwg
bGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuY2FjaGVkU2Ny
aXB0KCkpKSB7CisgICAgICAgICAgICB2bS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVFcnJv
cihleGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSk7CisgICAgICAgICAgICBldmFsdWF0aW9uRXhj
ZXB0aW9uID0gdm0uZXhjZXB0aW9uKCk7CisgICAgICAgICAgICB2bS5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICB9CiAgICAgfQorICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXZhbHVhdGlvbkV4
Y2VwdGlvbjsKIH0KIAotdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzZXRFeGNlcHRpb24o
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGV4Y2VwdGlvbikKK3ZvaWQgV29ya2VyU2Ny
aXB0Q29udHJvbGxlcjo6c2V0RXhjZXB0aW9uKEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24pCiB7
Ci0gICAgbV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbEV4ZWMoKS0+dm0oKS50aHJv
d0V4Y2VwdGlvbihtX3dvcmtlckdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsRXhlYygpLCBleGNl
cHRpb24uanNWYWx1ZSgpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2VyR2xv
YmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCk7CisgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBleGNlcHRpb24pOwogfQogCiB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
OnNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24oKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw5ICs2MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29k
ZSYpOwotICAgICAgICB2b2lkIGV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmLCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSogZXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBldmFsdWF0ZShj
b25zdCBTY3JpcHRTb3VyY2VDb2RlJiwgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlv
bik7CiAKLSAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmKTsKKyAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oSlNDOjpFeGNlcHRpb24qKTsKIAog
ICAgICAgICAvLyBBc3luYyByZXF1ZXN0IHRvIHRlcm1pbmF0ZSBhIEpTIHJ1biBleGVjdXRpb24u
IEV2ZW50dWFsbHkgY2F1c2VzIHRlcm1pbmF0aW9uCiAgICAgICAgIC8vIGV4Y2VwdGlvbiByYWlz
ZWQgZHVyaW5nIEpTIGV4ZWN1dGlvbiwgaWYgdGhlIHdvcmtlciB0aHJlYWQgaGFwcGVucyB0byBy
dW4gSlMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1
Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cnVuRXZl
bnRMbwogICAgIH0gd2hpbGUgKHJlc3VsdCAhPSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkICYmICFt
X2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMpOwogfQogCi12b2lkIFdvcmtlclNjcmlwdERl
YnVnU2VydmVyOjpyZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSBleGNlcHRpb24pIGNvbnN0Cit2b2lkIFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjpyZXBv
cnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRp
b24pIGNvbnN0CiB7CiAgICAgV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1
Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtl
clNjcmlwdERlYnVnU2VydmVyLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoSlND
OjpKU0dsb2JhbE9iamVjdCopIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBydW5FdmVu
dExvb3BXaGlsZVBhdXNlZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRT
Y3JpcHQoSlNDOjpFeGVjU3RhdGUqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiopIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
V29ya2VyR2xvYmFsU2NvcGUqIG1fd29ya2VyR2xvYmFsU2NvcGU7CiAgICAgTGlzdGVuZXJTZXQg
bV9saXN0ZW5lcnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlw
dE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dl
YlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3ICsx
MjEsNyBAQCBpZCBjcmVhdGVKU1dyYXBwZXIoSlNDOjpKU09iamVjdCogb2JqZWN0CiAgICAgcmV0
dXJuIFtbW1dlYlNjcmlwdE9iamVjdCBhbGxvY10gX2luaXRXaXRoSlNPYmplY3Q6b2JqZWN0IG9y
aWdpblJvb3RPYmplY3Q6b3JpZ2luIHJvb3RPYmplY3Q6cm9vdF0gYXV0b3JlbGVhc2VdOwogfQog
Ci1zdGF0aWMgdm9pZCBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoRXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTVmFsdWUmIGV4Y2VwdGlvbikKK3N0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShF
eGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAgICAgSlNET01X
aW5kb3cqIHdpbmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgp
KTsKICAgICBpZiAoIXdpbmRvdyB8fCAhZXhjZXB0aW9uKQpAQCAtMTMxLDcgKzEzMSw3IEBAIHN0
YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShFeGVjU3QKIAogc3RhdGljIHZvaWQgYWRk
RXhjZXB0aW9uVG9Db25zb2xlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0M6OkpTVmFsdWUg
ZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2Vw
dGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CkBAIC0zNDIsOCAr
MzQyLDggQEAgLSAoaWQpY2FsbFdlYlNjcmlwdE1ldGhvZDooTlNTdHJpbmcgKiluYQogICAgIGlm
ICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBKU0M6
OkpTVmFsdWUgZXhjZXB0aW9uOwotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBKU01haW5UaHJl
YWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgW3Nl
bGYgX2ltcF0sIGFyZ0xpc3QsICZleGNlcHRpb24pOworICAgIEpTQzo6RXhjZXB0aW9uKiBleGNl
cHRpb247CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6
Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBbc2VsZiBfaW1wXSwgYXJn
TGlzdCwgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgYWRkRXhj
ZXB0aW9uVG9Db25zb2xlKGV4ZWMsIGV4Y2VwdGlvbik7CkBAIC0zNjYsNyArMzY2LDcgQEAgLSAo
aWQpZXZhbHVhdGVXZWJTY3JpcHQ6KE5TU3RyaW5nICopc2NyaQogCiAgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgCi0gICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQp
KSwgSlNDOjpKU1ZhbHVlKCksIDApOworICAgIEpTQzo6SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpT
TWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywgbWFrZVNvdXJjZShTdHJpbmcoc2Ny
aXB0KSksIEpTQzo6SlNWYWx1ZSgpKTsKIAogICAgIGlkIHJlc3VsdE9iaiA9IFtXZWJTY3JpcHRP
YmplY3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJldHVyblZhbHVlIG9yaWdpblJvb3RPYmpl
Y3Q6W3NlbGYgX29yaWdpblJvb3RPYmplY3RdIHJvb3RPYmplY3Q6W3NlbGYgX3Jvb3RPYmplY3Rd
XTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVGltZWxpbmVBZ2VudC5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzE5LDcgKzMxOSw4IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ2FsbEZ1bmMK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIFRpbWVsaW5lUmVjb3JkRW50
cnkmIGVudHJ5ID0gbV9yZWNvcmRTdGFjay5sYXN0KCk7Ci0gICAgICAgICAgICBBU1NFUlQoZW50
cnkudHlwZSA9PSBUaW1lbGluZVJlY29yZFR5cGU6OkZ1bmN0aW9uQ2FsbCk7CisgICAgICAgICAg
ICAvLyBGSVhNRTogdGVtcCBIQUNLIGZvciB0ZXN0aW5nLiAgRG8gbm90IGxhbmQhCisgICAgICAg
ICAgICAvLyBBU1NFUlQoZW50cnkudHlwZSA9PSBUaW1lbGluZVJlY29yZFR5cGU6OkZ1bmN0aW9u
Q2FsbCk7CiAKICAgICAgICAgICAgIFJlZlB0cjxKU0M6OlByb2ZpbGU+IHByb2ZpbGUgPSBzdG9w
UHJvZmlsaW5nKGZyYW1lLCBBU0NJSUxpdGVyYWwoIlRpbWVsaW5lIEZ1bmN0aW9uQ2FsbCIpKTsK
ICAgICAgICAgICAgIGlmIChwcm9maWxlKQpAQCAtNzAyLDcgKzcwMyw4IEBAIHZvaWQgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6ZGlkQ29tcGxldGUKICAgICBpZiAoIW1fcmVjb3JkU3RhY2suaXNF
bXB0eSgpKSB7CiAgICAgICAgIFRpbWVsaW5lUmVjb3JkRW50cnkgZW50cnkgPSBtX3JlY29yZFN0
YWNrLmxhc3QoKTsKICAgICAgICAgbV9yZWNvcmRTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAg
IEFTU0VSVF9VTlVTRUQodHlwZSwgZW50cnkudHlwZSA9PSB0eXBlKTsKKyAgICAgICAgLy8gQVNT
RVJUX1VOVVNFRCh0eXBlLCBlbnRyeS50eXBlID09IHR5cGUpOworICAgICAgICBVTlVTRURfUEFS
QU0odHlwZSk7IC8vIEZJWE1FOiB0ZW1wIEhBQ0sgZm9yIHRlc3RpbmcuICBEbyBub3QgbGFuZCEK
ICAgICAgICAgZGlkQ29tcGxldGVSZWNvcmRFbnRyeShlbnRyeSk7CiAgICAgfQogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5j
cHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2Ny
aXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgYm9v
bCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OmlzQ29udGVudFNjcgogICAgIHJldHVybiAmY3VycmVu
dFdvcmxkKGV4ZWMpICE9ICZtYWluVGhyZWFkTm9ybWFsV29ybGQoKTsKIH0KIAotdm9pZCBQYWdl
U2NyaXB0RGVidWdTZXJ2ZXI6OnJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgZXhjZXB0aW9uKSBjb25zdAordm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJlcG9ydEV4
Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKSBjb25zdAogewog
ICAgIFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaAko
cmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHRE
ZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIGRpZENvbnRpbnVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgcnVuRXZlbnRMb29wV2hpbGVQYXVzZWQoKSBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50U2NyaXB0KEpTQzo6RXhlY1N0YXRlKikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlcG9y
dEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICB2b2lkIHJ1bkV2ZW50TG9vcFdoaWxlUGF1c2VkSW50ZXJuYWwoKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlz
aW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsOSArMTk3LDkgQEAgdm9pZCBXb3JrZXJHbG9iYWxT
Y29wZTo6aW1wb3J0U2NyaXB0cyhjbwogCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6c2NyaXB0SW1wb3J0ZWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBzY3JpcHRMb2FkZXIt
PmlkZW50aWZpZXIoKSwgc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSk7CiAKLSAgICAgICAgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUgZXhjZXB0aW9uOwotICAgICAgICBtX3NjcmlwdC0+ZXZhbHVhdGUo
U2NyaXB0U291cmNlQ29kZShzY3JpcHRMb2FkZXItPnNjcmlwdCgpLCBzY3JpcHRMb2FkZXItPnJl
c3BvbnNlVVJMKCkpLCAmZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKCFleGNlcHRpb24uaGFzTm9W
YWx1ZSgpKSB7CisgICAgICAgIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb247CisgICAgICAgIG1f
c2NyaXB0LT5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdExvYWRlci0+c2NyaXB0KCks
IHNjcmlwdExvYWRlci0+cmVzcG9uc2VVUkwoKSksIGV4Y2VwdGlvbik7CisgICAgICAgIGlmIChl
eGNlcHRpb24pIHsKICAgICAgICAgICAgIG1fc2NyaXB0LT5zZXRFeGNlcHRpb24oZXhjZXB0aW9u
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRGVidWdnZXJNYW5hZ2VyLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L0RlYnVnZ2VyTWFuYWdlci5qcwkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRGVidWdnZXJNYW5hZ2VyLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTgsNiArNDU4LDggQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdl
ciA9IGNsYXNzIERlYgogICAgICAgICBpZiAodGhpcy5fZGVsYXllZFJlc3VtZVRpbWVvdXQpIHsK
ICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9kZWxheWVkUmVzdW1lVGltZW91dCk7CiAg
ICAgICAgICAgICBkZWxldGUgdGhpcy5fZGVsYXllZFJlc3VtZVRpbWVvdXQ7CisKKyAgICAgICAg
ICAgIHRoaXMuZGVsYXllZFJlc3VtZVdvcmsoKTsgLy8gRklYTUU6IHRlbXAgSEFDSyBmb3IgdGVz
dGluZy4gIERvIG5vdCBsYW5kIQogICAgICAgICB9CiAKICAgICAgICAgdmFyIHdhc1N0aWxsUGF1
c2VkID0gdGhpcy5fcGF1c2VkOwpAQCAtNDkzLDEwICs0OTUsMjQgQEAgV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyTWFuYWdlciA9IGNsYXNzIERlYgogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkFjdGl2ZUNhbGxGcmFt
ZURpZENoYW5nZSk7CiAgICAgfQogCisgICAgZGVsYXllZFJlc3VtZVdvcmsoKQorICAgIHsKKyAg
ICAgICAgZGVsZXRlIHRoaXMuX2RlbGF5ZWRSZXN1bWVUaW1lb3V0OworICAgICAgICAKKyAgICAg
ICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2NhbGxGcmFtZXMgPSBudWxs
OworICAgICAgICB0aGlzLl9hY3RpdmVDYWxsRnJhbWUgPSBudWxsOworICAgICAgICAKKyAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFu
YWdlci5FdmVudC5SZXN1bWVkKTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5DYWxsRnJhbWVzRGlkQ2hhbmdl
KTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyTWFuYWdlci5FdmVudC5BY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UpOworICAgIH0KKwog
ICAgIGRlYnVnZ2VyRGlkUmVzdW1lKCkKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVyLgogCisgICAgICAgIC8vIEZJWE1FOiB0ZW1wIEhB
Q0sgZm9yIHRlc3RpbmcuICBEbyBub3QgbGFuZCEKICAgICAgICAgZnVuY3Rpb24gZGVsYXllZFdv
cmsoKQogICAgICAgICB7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fZGVsYXllZFJlc3VtZVRp
bWVvdXQ7CkBAIC01MTMsNiArNTI5LDcgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlciA9
IGNsYXNzIERlYgogICAgICAgICAvLyBXZSBkZWxheSBjbGVhcmluZyB0aGUgc3RhdGUgYW5kIGZp
cmluZyBldmVudHMgc28gdGhlIHVzZXIgaW50ZXJmYWNlIGRvZXMgbm90IGZsYXNoCiAgICAgICAg
IC8vIGJldHdlZW4gYnJpZWYgc3RlcHMgb3Igc3VjY2Vzc2l2ZSBicmVha3BvaW50cy4KICAgICAg
ICAgdGhpcy5fZGVsYXllZFJlc3VtZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGRlbGF5ZWRXb3JrLmJp
bmQodGhpcyksIDUwKTsKKy8vICAgICAgICB0aGlzLl9kZWxheWVkUmVzdW1lVGltZW91dCA9IHNl
dFRpbWVvdXQodGhpcy5kZWxheWVkUmVzdW1lV29yay5iaW5kKHRoaXMpLCA1MCk7IC8vIEZJWE1F
OiB0ZW1wIEhBQ0sgZm9yIHRlc3RpbmcuICBEbyBub3QgbGFuZCEKICAgICB9CiAKICAgICBwbGF5
QnJlYWtwb2ludEFjdGlvblNvdW5kKGJyZWFrcG9pbnRBY3Rpb25JZGVudGlmaWVyKQpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sTWVzc2FnZXMuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRXhjZXB0
aW9uLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9BcHBsaWNhdGlvbkNhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5oPgpAQCAtNTIyLDcgKzUyMyw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJl
cG9ydEV4Y2VwdGlvbihKU0MKICAgICBpZiAoIXRvSlNET01XaW5kb3coZXhlY1N0YXRlLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJDb3JlOjpyZXBv
cnRFeGNlcHRpb24oZXhlY1N0YXRlLCB0b0pTKGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKSk7CisgICAg
V2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgRXhjZXB0aW9uOjpjYXN0KHRvSlMo
ZXhlY1N0YXRlLCBleGNlcHRpb24pKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZENy
ZWF0ZVBhZ2UoV2ViUGFnZSogcGFnZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0JKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw3IEBACiAjaW1wb3J0IDxDb3Jl
Rm91bmRhdGlvbi9DRlNldC5oPgogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTENvbm5lY3Rpb24u
aD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0V4Y2VwdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5o
PgogI2ltcG9ydCA8V2ViQ29yZS9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaD4KICNpbXBv
cnQgPFdlYkNvcmUvQW5pbWF0aW9uQ29udHJvbGxlci5oPgpAQCAtNzI0LDcgKzcyNSw4IEBAICsg
KHZvaWQpX3JlcG9ydEV4Y2VwdGlvbjooSlNWYWx1ZVJlZilleGMKICAgICBpZiAoIXRvSlNET01X
aW5kb3coZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKQogICAgICAgICByZXR1cm47
CiAKLSAgICByZXBvcnRFeGNlcHRpb24oZXhlY1N0YXRlLCB0b0pTKGV4ZWNTdGF0ZSwgZXhjZXB0
aW9uKSk7CisgICAgRXhjZXB0aW9uKiB2bUV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjo6Y2FzdCh0b0pT
KGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKSk7CisgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwg
dm1FeGNlcHRpb24pOwogfQogCiBzdGF0aWMgdm9pZCBXZWJLaXRJbml0aWFsaXplQXBwbGljYXRp
b25DYWNoZVBhdGhJZk5lY2Vzc2FyeSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNp
b24gMTg1MTEwKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYwMjksNyArNjAyOSw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmll
dzo6cmVwb3IKICAgICBpZiAoIXRvSlNET01XaW5kb3coZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgV2ViQ29yZTo6cmVwb3J0
RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgdG9KUyhleGVjU3RhdGUsIGV4Y2VwdGlvbikpOworICAgIEpT
Qzo6RXhjZXB0aW9uKiB2bUV4Y2VwdGlvbiAqIEpTQzo6RXhjZXB0aW9uOjpjYXN0KHRvSlMoZXhl
Y1N0YXRlLCBleGNlcHRpb24pKTsKKyAgICBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24oZXhlY1N0
YXRlLCB2bUV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZG9tL3JlZ3Jlc3MtMTMxNTMwLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9yZWdyZXNzLTEzMTUzMC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDE4NTExMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3JlZ3Jlc3MtMTMxNTMwLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIENPTlNPTEUgTUVTU0FHRTogbGlu
ZSA1OiBFeGNlcHRpb24gdG8gdHJpZ2dlciB1bndpbmRpbmcgaW4gTXV0YXRpb25PYnNlcnZlcgot
Q09OU09MRSBNRVNTQUdFOiBQZW5kaW5nIGV4Y2VwdGlvbiBiZWZvcmUgTXV0YXRpb25PYnNlcnZl
cnMgYXJlIGNhbGxlZC4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAyMjogUGVuZGluZyBleGNlcHRp
b24gYmVmb3JlIE11dGF0aW9uT2JzZXJ2ZXJzIGFyZSBjYWxsZWQuCiBSZWdyZXNzaW9uIHRlc3Qg
Zm9yIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzMTUzMC4gVGhpcyB0ZXN0IHNob3VsZCBub3QgY3Jh
c2guCiAKIE11dGF0ZSB0aGF0IG5vZGUKSW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1
Z2dlci9icmVhay1vbi1leGNlcHRpb25zLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9ucy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWst
b24tZXhjZXB0aW9ucy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBA
QAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFBhc3MgMTogdGVzdEV4Y2VwdGlvbnMgd2l0aCBi
cmVhayBvbiBhbGwgZXhjZXB0aW9ucworQ09OU09MRSBNRVNTQUdFOiBsaW5lIDc6IGZvbzogdHJ5
CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgOTogZm9vOiBmb3IuLi5vZjogaSA9IDEKK0NPTlNPTEUg
TUVTU0FHRTogbGluZSAxMTogZm9vOiB0aHJvdyAiVGVzdEVycm9yIgorQ09OU09MRSBNRVNTQUdF
OiBsaW5lIDE2OiBmb286IGNhdGNoIFRlc3RFcnJvcgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE5
OiBmb286IGZpbmFsbHkKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAyOiBXaW5kb3cub25lcnJvcjog
VGVzdEVycm9yCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTc6IFRlc3RFcnJvcgorQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDE6IFBhc3MgMjogdGVzdFByb21pc2VzIHdpdGggYnJlYWsgb24gYWxsIGV4
Y2VwdGlvbnMKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAzNjogUHJvbWlzZTogdGhlbgorQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDc6IGZvbzogdHJ5CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgOTogZm9v
OiBmb3IuLi5vZjogaSA9IDEKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxMTogZm9vOiB0aHJvdyAi
VGVzdEVycm9yIgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE2OiBmb286IGNhdGNoIFRlc3RFcnJv
cgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE5OiBmb286IGZpbmFsbHkKK0NPTlNPTEUgTUVTU0FH
RTogbGluZSAzOTogUHJvbWlzZTogY2F0Y2ggVGVzdEVycm9yCitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgMTogUGFzcyAzOiB0ZXN0RXhjZXB0aW9ucyB3aXRoIGJyZWFrIG9uIHVuY2F1Z2h0IGV4Y2Vw
dGlvbnMKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA3OiBmb286IHRyeQorQ09OU09MRSBNRVNTQUdF
OiBsaW5lIDk6IGZvbzogZm9yLi4ub2Y6IGkgPSAxCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTE6
IGZvbzogdGhyb3cgIlRlc3RFcnJvciIKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxNjogZm9vOiBj
YXRjaCBUZXN0RXJyb3IKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOTogZm9vOiBmaW5hbGx5CitD
T05TT0xFIE1FU1NBR0U6IGxpbmUgMjogV2luZG93Lm9uZXJyb3I6IFRlc3RFcnJvcgorQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDE3OiBUZXN0RXJyb3IKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBQ
YXNzIDQ6IHRlc3RQcm9taXNlcyB3aXRoIGJyZWFrIG9uIHVuY2F1Z2h0IGV4Y2VwdGlvbnMKK0NP
TlNPTEUgTUVTU0FHRTogbGluZSAzNjogUHJvbWlzZTogdGhlbgorQ09OU09MRSBNRVNTQUdFOiBs
aW5lIDc6IGZvbzogdHJ5CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgOTogZm9vOiBmb3IuLi5vZjog
aSA9IDEKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxMTogZm9vOiB0aHJvdyAiVGVzdEVycm9yIgor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDE2OiBmb286IGNhdGNoIFRlc3RFcnJvcgorQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDE5OiBmb286IGZpbmFsbHkKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAzOTog
UHJvbWlzZTogY2F0Y2ggVGVzdEVycm9yCitUZXN0IHRoYXQgcGF1c2luZyBpbiBkaWZmZXJlbnQg
d2F5cyB0cmlnZ2VycyBkaWZmZXJlbnQgcGF1c2UgcmVhc29ucy4KKworUEFVU0UgIzEKKyAgUkVB
U09OOiBleGNlcHRpb24KK1BhdXNlZCBhdCBmb286MTI6MzQKK1JFU1VNRUQKKworUEFVU0UgIzIK
KyAgUkVBU09OOiBleGNlcHRpb24KK1BhdXNlZCBhdCBmb286MTc6MTYKK1JFU1VNRUQKKworUEFV
U0UgIzMKKyAgUkVBU09OOiBleGNlcHRpb24KK1BhdXNlZCBhdCBmb286MTI6MzQKK1JFU1VNRUQK
KworUEFVU0UgIzQKKyAgUkVBU09OOiBleGNlcHRpb24KK1BhdXNlZCBhdCBmb286MTc6MTYKK1JF
U1VNRUQKKworUEFVU0UgIzUKKyAgUkVBU09OOiBleGNlcHRpb24KK1BhdXNlZCBhdCBwcm9taXNl
Q2F0Y2g6NDA6MTYKK1JFU1VNRUQKKworUEFVU0UgIzYKKyAgUkVBU09OOiBleGNlcHRpb24KK1Bh
dXNlZCBhdCBmb286MTc6MTYKK1JFU1VNRUQKKworUEFVU0UgIzcKKyAgUkVBU09OOiBleGNlcHRp
b24KK1BhdXNlZCBhdCBmb286MTc6MTYKK1JFU1VNRUQKKworUEFVU0UgIzgKKyAgUkVBU09OOiBl
eGNlcHRpb24KK1BhdXNlZCBhdCBwcm9taXNlQ2F0Y2g6NDA6MTYKK1JFU1VNRUQKKworCkluZGV4
OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9ucy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1l
eGNlcHRpb25zLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVi
dWdnZXIvYnJlYWstb24tZXhjZXB0aW9ucy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTc1IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3It
dGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIu
L3Jlc291cmNlcy9icmVhay1vbi1leGNlcHRpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citm
dW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB2YXIgcGF1c2VzID0gMDsKKyAgICB2YXIgaW5kZXggPSAw
OworCisgICAgZnVuY3Rpb24gZW5hYmxlQnJlYWtPbkFsbEV4Y2VwdGlvbnMoKSB7CisgICAgICAg
IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQuZGlz
YWJsZWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkaXNhYmxlQnJlYWtPbkFsbEV4
Y2VwdGlvbnMoKSB7CisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWxsRXhj
ZXB0aW9uc0JyZWFrcG9pbnQuZGlzYWJsZWQgPSB0cnVlOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGVuYWJsZUJyZWFrT25VbmNhdWdodEV4Y2VwdGlvbnMoKSB7CisgICAgICAgIFdlYkluc3BlY3Rv
ci5kZWJ1Z2dlck1hbmFnZXIuYWxsVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNhYmxl
ZCA9IGZhbHNlOworICAgIH0KKworICAgIGZ1bmN0aW9uIGRpc2FibGVCcmVha09uVW5jYXVnaHRF
eGNlcHRpb25zKCkgeworICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFsbFVu
Y2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQuZGlzYWJsZWQgPSB0cnVlOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHRpdGxlKHN0cikgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5Q
YWdlKCJzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnIiArIHN0ciArICInKTsg
fSwgMCkiKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0Q2FzZSh0ZXN0KSB7CisgICAg
ICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoInNldFRpbWVvdXQoIiArIHRlc3QgKyAi
LCAwKSIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGR1bXBQYXVzZUxvY2F0aW9uKCkgeworICAg
ICAgICB2YXIgY2FsbEZyYW1lID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hY3RpdmVD
YWxsRnJhbWU7CisgICAgICAgIGlmIChjYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIHZhciBmdW5j
TmFtZSA9IGNhbGxGcmFtZS5mdW5jdGlvbk5hbWUgfHwgIjxhbm9ueW1vdXM+IjsKKyAgICAgICAg
ICAgIHZhciBsb2NhdGlvbiA9IGNhbGxGcmFtZS5zb3VyY2VDb2RlTG9jYXRpb247CisgICAgICAg
ICAgICB2YXIgbGluZSA9IGxvY2F0aW9uLmxpbmVOdW1iZXIgKyAxOworICAgICAgICAgICAgdmFy
IGNvbHVtbiA9IGxvY2F0aW9uLmNvbHVtbk51bWJlciArIDE7CisKKyAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QubG9nKCJQYXVzZWQgYXQgIiArIGZ1bmNOYW1lICsgIjoiICsgbGluZSArICI6IiAr
IGNvbHVtbik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2co
IlBhdXNlZCBhdCAiICsgY2FsbEZyYW1lKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBub3RoaW5n
VG9EbygpIHsKKyAgICB9CisKKyAgICBmdW5jdGlvbiByZXN1bWUoKSB7CisgICAgICAgIFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucmVzdW1lKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
ZG9uZSgpIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICB9CisK
KyAgICB2YXIgc3RlcHMgPSBbCisgICAgICAgIC8vIFBhc3MgMQorICAgICAgICB7IGV4cHJlc3Np
b246CisgICAgICAgICAgICAiZW5hYmxlQnJlYWtPbkFsbEV4Y2VwdGlvbnMoKTsiICsKKyAgICAg
ICAgICAgICJ0aXRsZSgnUGFzcyAxOiB0ZXN0RXhjZXB0aW9ucyB3aXRoIGJyZWFrIG9uIGFsbCBl
eGNlcHRpb25zJyk7IiArCisgICAgICAgICAgICAicnVuVGVzdENhc2UoJ3Rlc3RFeGNlcHRpb25z
Jyk7IgorICAgICAgICB9LAorICAgICAgICB7IGV4cHJlc3Npb246IC8vIHBhdXNlZCBhdCBUaHJv
dyBQb2ludCAxLgorICAgICAgICAgICAgImR1bXBQYXVzZUxvY2F0aW9uKCk7IiArCisgICAgICAg
ICAgICAicmVzdW1lKCk7IgorICAgICAgICB9LAorICAgICAgICB7IGV4cHJlc3Npb246IC8vIHJl
c3VtZWQgZnJvbSBUaHJvdyBQb2ludCAxLgorICAgICAgICAgICAgIm5vdGhpbmdUb0RvKCk7Igor
ICAgICAgICB9LAorICAgICAgICB7IGV4cHJlc3Npb246IC8vIHBhdXNlZCBhdCBUaHJvdyBQb2lu
dCAyLgorICAgICAgICAgICAgImR1bXBQYXVzZUxvY2F0aW9uKCk7IiArCisgICAgICAgICAgICAi
cmVzdW1lKCk7IgorICAgICAgICB9LAorCisgICAgICAgIC8vIFBhc3MgMjoKKyAgICAgICAgeyBl
eHByZXNzaW9uOiAvLyByZXN1bWVkIGZyb20gVGhyb3cgUG9pbnQgMi4KKyAgICAgICAgICAgICJ0
aXRsZSgnUGFzcyAyOiB0ZXN0UHJvbWlzZXMgd2l0aCBicmVhayBvbiBhbGwgZXhjZXB0aW9ucycp
OyIgKworICAgICAgICAgICAgInJ1blRlc3RDYXNlKCd0ZXN0UHJvbWlzZXMnKTsiCisgICAgICAg
IH0sCisgICAgICAgIHsgZXhwcmVzc2lvbjogLy8gcGF1c2VkIGF0IFRocm93IFBvaW50IDEuCisg
ICAgICAgICAgICAiZHVtcFBhdXNlTG9jYXRpb24oKTsiICsKKyAgICAgICAgICAgICJyZXN1bWUo
KTsiCisgICAgICAgIH0sCisgICAgICAgIHsgZXhwcmVzc2lvbjogLy8gcmVzdW1lZCBmcm9tIFRo
cm93IFBvaW50IDEuCisgICAgICAgICAgICAibm90aGluZ1RvRG8oKTsiCisgICAgICAgIH0sCisg
ICAgICAgIHsgZXhwcmVzc2lvbjogLy8gcGF1c2VkIGF0IFRocm93IFBvaW50IDIuCisgICAgICAg
ICAgICAiZHVtcFBhdXNlTG9jYXRpb24oKTsiICsKKyAgICAgICAgICAgICJyZXN1bWUoKTsiCisg
ICAgICAgIH0sCisgICAgICAgIHsgZXhwcmVzc2lvbjogLy8gcmVzdW1lZCBmcm9tIFRocm93IFBv
aW50IDIuCisgICAgICAgICAgICAibm90aGluZ1RvRG8oKTsiCisgICAgICAgIH0sCisgICAgICAg
IHsgZXhwcmVzc2lvbjogLy8gcGF1c2VkIGF0IFRocm93IFBvaW50IDMuCisgICAgICAgICAgICAi
ZHVtcFBhdXNlTG9jYXRpb24oKTsiICsKKyAgICAgICAgICAgICJyZXN1bWUoKTsiCisgICAgICAg
IH0sCisKKyAgICAgICAgLy8gUGFzcyAzCisgICAgICAgIHsgZXhwcmVzc2lvbjogLy8gcmVzdW1l
ZCBmcm9tIFRocm93IFBvaW50IDMuCisgICAgICAgICAgICAiZGlzYWJsZUJyZWFrT25BbGxFeGNl
cHRpb25zKCk7ICIgKworICAgICAgICAgICAgImVuYWJsZUJyZWFrT25VbmNhdWdodEV4Y2VwdGlv
bnMoKTsgIiArCisgICAgICAgICAgICAidGl0bGUoJ1Bhc3MgMzogdGVzdEV4Y2VwdGlvbnMgd2l0
aCBicmVhayBvbiB1bmNhdWdodCBleGNlcHRpb25zJyk7IiArCisgICAgICAgICAgICAicnVuVGVz
dENhc2UoJ3Rlc3RFeGNlcHRpb25zJyk7IgorICAgICAgICB9LAorICAgICAgICB7IGV4cHJlc3Np
b246IC8vIHBhdXNlZCBhdCBUaHJvdyBQb2ludCAyLgorICAgICAgICAgICAgImR1bXBQYXVzZUxv
Y2F0aW9uKCk7IiArCisgICAgICAgICAgICAicmVzdW1lKCk7IgorICAgICAgICB9LAorCisgICAg
ICAgIC8vIFBhc3MgNAorICAgICAgICB7IGV4cHJlc3Npb246IC8vIHJlc3VtZWQgZnJvbSBUaHJv
dyBQb2ludCAyLgorICAgICAgICAgICAgInRpdGxlKCdQYXNzIDQ6IHRlc3RQcm9taXNlcyB3aXRo
IGJyZWFrIG9uIHVuY2F1Z2h0IGV4Y2VwdGlvbnMnKTsiICsKKyAgICAgICAgICAgICJydW5UZXN0
Q2FzZSgndGVzdFByb21pc2VzJyk7IgorICAgICAgICB9LAorICAgICAgICB7IGV4cHJlc3Npb246
IC8vIHBhdXNlZCBhdCBUaHJvdyBQb2ludCAyLgorICAgICAgICAgICAgImR1bXBQYXVzZUxvY2F0
aW9uKCk7IiArCisgICAgICAgICAgICAicmVzdW1lKCk7IgorICAgICAgICB9LAorICAgICAgICB7
IGV4cHJlc3Npb246IC8vIHJlc3VtZWQgZnJvbSBUaHJvdyBQb2ludCAyLgorICAgICAgICAgICAg
Im5vdGhpbmdUb0RvKCk7IgorICAgICAgICB9LAorICAgICAgICB7IGV4cHJlc3Npb246IC8vIHBh
dXNlZCBhdCBUaHJvdyBQb2ludCAzLgorICAgICAgICAgICAgImR1bXBQYXVzZUxvY2F0aW9uKCk7
IiArCisgICAgICAgICAgICAicmVzdW1lKCk7IgorICAgICAgICB9LAorCisgICAgICAgIC8vIFRo
ZSBlbmQKKyAgICAgICAgeyBleHByZXNzaW9uOiAvLyByZXN1bWVkIGZyb20gVGhyb3cgUG9pbnQg
My4KKyAgICAgICAgICAgICJkb25lKCk7IgorICAgICAgICB9LAorICAgIF07CisKKyAgICBmdW5j
dGlvbiBuZXh0U3RlcCgpCisgICAgeworICAgICAgICB2YXIgc3RlcCA9IHN0ZXBzW2luZGV4Kytd
OworICAgICAgICBpZiAoIXN0ZXApIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxl
dGVUZXN0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZXZhbChz
dGVwLmV4cHJlc3Npb24pOworICAgIH0KKworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFn
ZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlNj
cmlwdEFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgc2NyaXB0T2JqZWN0ID0g
ZXZlbnQuZGF0YS5zY3JpcHQ7CisgICAgICAgIGlmICghL2JyZWFrLW9uLWV4Y2VwdGlvbnNcLmpz
JC8udGVzdChzY3JpcHRPYmplY3QudXJsKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
bmV4dFN0ZXAoKTsKKyAgICB9KTsKKworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlBhdXNl
ZCwgZnVuY3Rpb24oZXZlbnQpIHsKKy8vICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2Vy
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5DYWxs
RnJhbWVzRGlkQ2hhbmdlLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICBJbnNwZWN0b3JUZXN0
LmxvZygiUEFVU0UgIyIgKyAoKytwYXVzZXMpKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2co
IiAgUkVBU09OOiAiICsgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5wYXVzZVJlYXNvbik7
CisgICAgICAgIG5leHRTdGVwKCk7CisgICAgfSk7CisKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdn
ZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5F
dmVudC5SZXN1bWVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICBJbnNwZWN0b3JUZXN0Lmxv
ZygiUkVTVU1FRCIpOworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiIik7CisgICAgICAgIG5l
eHRTdGVwKCk7CisgICAgfSk7CisKKyAgICBJbnNwZWN0b3JUZXN0LnJlbG9hZFBhZ2UoKTsKK30K
Kzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDxwPlRl
c3QgdGhhdCBwYXVzaW5nIGluIGRpZmZlcmVudCB3YXlzIHRyaWdnZXJzIGRpZmZlcmVudCBwYXVz
ZSByZWFzb25zLjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2luc3Bl
Y3Rvci9kZWJ1Z2dlci9yZXNvdXJjZXMvYnJlYWstb24tZXhjZXB0aW9ucy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvcmVzb3VyY2VzL2JyZWFrLW9uLWV4
Y2VwdGlvbnMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdn
ZXIvcmVzb3VyY2VzL2JyZWFrLW9uLWV4Y2VwdGlvbnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MiBAQAord2luZG93Lm9uZXJyb3IgPSBmdW5jdGlvbihlKXsKKyAgICBjb25zb2xlLmxv
ZygiV2luZG93Lm9uZXJyb3I6ICIgKyBlKTsKK307CisKK2Z1bmN0aW9uIGZvbyhhcnIpIHsKKyAg
ICB0cnkgeworICAgICAgICBjb25zb2xlLmxvZygiZm9vOiB0cnkiKTsKKyAgICAgICAgZm9yIChp
IG9mIGFycikgeworICAgICAgICAgICAgY29uc29sZS5sb2coImZvbzogZm9yLi4ub2Y6IGkgPSAi
ICsgaSk7CisgICAgICAgICAgICBpZiAoaSA+PSAxKSB7CisgICAgICAgICAgICAgICAgY29uc29s
ZS5sb2coJ2ZvbzogdGhyb3cgIlRlc3RFcnJvciInKTsKKyAgICAgICAgICAgICAgICB0aHJvdyAi
VGVzdEVycm9yIjsgLy8gVGhyb3cgcG9pbnQgMS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgY29uc29sZS5sb2coImZvbzogY2F0Y2ggIiArIGUp
OworICAgICAgICB0aHJvdyBlOyAvLyBUaHJvdyBwb2ludCAyLgorICAgIH0gZmluYWxseSB7Cisg
ICAgICAgIGNvbnNvbGUubG9nKCJmb286IGZpbmFsbHkiKTsKKyAgICB9CisgICAgcmV0dXJuIDU7
Cit9CisKK3ZhciBpbm5lciA9IFsgMSwgMiwgMyBdOwordmFyIG91dGVyID0gW1sgImtleSIsIGlu
bmVyIF1dOworCitmdW5jdGlvbiB0ZXN0RXhjZXB0aW9ucygpIHsKKyAgICB2YXIgbyA9IG91dGVy
OworICAgIChuZXcgTWFwKG8pKS5mb3JFYWNoKGZvbyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RQcm9t
aXNlcygpIHsKKyAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlKHJlc29sdmUsIHJlamVj
dCkgeworICAgICAgICByZXNvbHZlKG91dGVyKTsKKyAgICB9KS50aGVuKGZ1bmN0aW9uIHByb21p
c2VUaGVuKHgpIHsKKyAgICAgICAgY29uc29sZS5sb2coIlByb21pc2U6IHRoZW4iKTsKKyAgICAg
ICAgdGVzdEV4Y2VwdGlvbnMoeCk7CisgICAgfSkuY2F0Y2goZnVuY3Rpb24gcHJvbWlzZUNhdGNo
KGUpIHsKKyAgICAgICAgY29uc29sZS5sb2coIlByb21pc2U6IGNhdGNoICIgKyBlKTsKKyAgICAg
ICAgdGhyb3cgZTsgLy8gVGhyb3cgcG9pbnQgMy4KKyAgICB9KTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254201</attachid>
            <date>2015-06-03 13:19:24 -0700</date>
            <delta_ts>2015-06-03 20:19:26 -0700</delta_ts>
            <desc>patch 6: windows build fix again for EWS.</desc>
            <filename>wip-exception6.patch</filename>
            <type>text/plain</type>
            <size>151894</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4NTExMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDU0LDYgKzQ1NCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAg
ICBydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5jcHAKICAgICBydW50aW1lL0Vycm9ySW5zdGFu
Y2UuY3BwCiAgICAgcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKKyAgICBydW50aW1lL0V4Y2Vw
dGlvbi5jcHAKICAgICBydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCiAgICAgcnVudGltZS9FeGNl
cHRpb25IZWxwZXJzLmNwcAogICAgIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNvbXBs
ZXRpb24uaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJEaXNh
c3NlbWJsZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFeGNlcHRpb25I
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJJbml0aWFs
aXplVGhyZWFkaW5nLmgiCkBAIC04OTksMTMgKzkwMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoCiAgICAg
ICAgIGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksICJhcmd1bWVudHMiKSwgYXJyYXkpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRpb247
CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKICAg
ICBzdG9wV2F0Y2guc3RhcnQoKTsKLSAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSwganNjU291cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXhj
ZXB0aW9uKTsKKyAgICBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291
cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCBleGNlcHRpb24pOwogICAg
IHN0b3BXYXRjaC5zdG9wKCk7CiAKLSAgICBpZiAoISFleGNlcHRpb24pIHsKKyAgICBpZiAoZXhj
ZXB0aW9uKSB7CiAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpAQCAtOTIyLDggKzkyMyw4IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2EKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgCi0gICAgSlNWYWx1
ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFt
ZSksIEpTVmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEV4Y2VwdGlvbiogZXZh
bHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBK
U1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIGlmIChldmFsdWF0aW9uRXhjZXB0
aW9uKQogICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV2YWx1YXRpb25F
eGNlcHRpb24pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTEyODUs
MTUgKzEyODYsMTUgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0Kgog
CiAgICAgICAgIHZtLnN0YXJ0U2FtcGxpbmcoKTsKIAotICAgICAgICBKU1ZhbHVlIGV2YWx1YXRp
b25FeGNlcHRpb247Ci0gICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdCwgZmlsZU5hbWUpLCBKU1Zh
bHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgRXhjZXB0aW9uKiBldmFsdWF0
aW9uRXhjZXB0aW9uOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZpbGVOYW1lKSwgSlNW
YWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3Mg
JiYgIWV2YWx1YXRpb25FeGNlcHRpb247CiAgICAgICAgIGlmIChkdW1wICYmICFldmFsdWF0aW9u
RXhjZXB0aW9uKQogICAgICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCByZXR1cm5WYWx1ZS50
b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNl
cHRpb24pIHsKLSAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlv
bkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHBy
aW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0
cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIElkZW50aWZpZXIgc3RhY2tJ
RCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksICJz
dGFjayIpOwotICAgICAgICAgICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXZhbHVhdGlvbkV4Y2Vw
dGlvbi5nZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOworICAgICAgICAg
ICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS5nZXQo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOwogICAgICAgICAgICAgaWYgKCFz
dGFja1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIl
c1xuIiwgc3RhY2tWYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZh
bHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
fQpAQCAtMTM0OSw4ICsxMzUwLDggQEAgc3RhdGljIHZvaWQgcnVuSW50ZXJhY3RpdmUoR2xvYmFs
T2JqZWN0KgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBl
dmFsdWF0aW9uRXhjZXB0aW9uOwotICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVh
dGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc291cmNlLCBpbnRlcnBy
ZXRlck5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgRXhj
ZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVl
ID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc291cmNl
LCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogI2Vs
c2UKICAgICAgICAgcHJpbnRmKCIlcyIsIGludGVyYWN0aXZlUHJvbXB0KTsKICAgICAgICAgVmVj
dG9yPGNoYXIsIDI1Nj4gbGluZTsKQEAgLTEzNjUsMTEgKzEzNjYsMTEgQEAgc3RhdGljIHZvaWQg
cnVuSW50ZXJhY3RpdmUoR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGxpbmUuYXBwZW5kKCdcMCcpOwogCi0gICAgICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKLSAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2UobGluZS5kYXRhKCksIGludGVycHJldGVyTmFtZSksIEpT
VmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgICAgICBFeGNlcHRpb24qIGV2YWx1
YXRpb25FeGNlcHRpb247CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKGxpbmUuZGF0YSgpLCBpbnRlcnBy
ZXRlck5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogI2VuZGlmCiAgICAg
ICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQotICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRp
b246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhj
ZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFs
dWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCByZXR1cm5WYWx1ZS50b1N0cmluZyhnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
KS51dGY4KCkuZGF0YSgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNw
cAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQVBJQ2FzdC5o
IgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNs
dWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNs
dWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIK
QEAgLTYzLDEyICs2NCwxMiBAQCBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3JpcHQoSlNDb250ZXh0
UmVmCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKTsKICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0LT5z
dHJpbmcoKSwgc291cmNlVVJMID8gc291cmNlVVJMLT5zdHJpbmcoKSA6IFN0cmluZygpLCBUZXh0
UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHN0YXJ0aW5nTGluZU51bWJl
ciksIE9yZGluYWxOdW1iZXI6OmZpcnN0KCkpKTsKIAotICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4
Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIHNvdXJjZSwganNUaGlzT2JqZWN0LCAmZXZhbHVhdGlvbkV4Y2VwdGlv
bik7CisgICAgRXhjZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmV0
dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc291cmNlLCBq
c1RoaXNPYmplY3QsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogCiAgICAgaWYgKGV2YWx1YXRpb25F
eGNlcHRpb24pIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRp
b24gPSB0b1JlZihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgICAgICpleGNl
cHRpb24gPSB0b1JlZihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1ZSgpKTsKICNpZiBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKICAgICAgICAgLy8gRklYTUU6IElmIHdlIGhhdmUgYSBk
ZWJ1Z2dlciBhdHRhY2hlZCB3ZSBjb3VsZCBsZWFybiBhYm91dCBQYXJzZUVycm9yIGV4Y2VwdGlv
bnMgdGhyb3VnaAogICAgICAgICAvLyBTY3JpcHREZWJ1Z1NlcnZlcjo6c291cmNlUGFyc2VkIGFu
ZCB0aGlzIHBhdGggY291bGQgcHJvZHVjZSBhIGR1cGxpY2F0ZSB3YXJuaW5nLiBUaGUKQEAgLTEw
Nyw3ICsxMDgsOCBAQCBib29sIEpTQ2hlY2tTY3JpcHRTeW50YXgoSlNDb250ZXh0UmVmIGN0CiAg
ICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhl
Yywgc3ludGF4RXhjZXB0aW9uKTsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAg
ICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVw
b3J0QVBJRXhjZXB0aW9uKGV4ZWMsIHN5bnRheEV4Y2VwdGlvbik7CisgICAgICAgIEV4Y2VwdGlv
biogZXhjZXB0aW9uID0gRXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgc3ludGF4RXhjZXB0
aW9uKTsKKyAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiAjZW5kaWYKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QAogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRhdGVDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSWRlbnRp
Zmllci5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKQEAgLTYxLDYgKzYyLDIx
IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKK3N0YXRpYyBib29sIGhhbmRsZUV4Y2VwdGlv
bklmTmVlZGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVJlZiogcmV0dXJuZWRFeGNlcHRpb25S
ZWYpCit7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEV4Y2VwdGlv
biogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIGlmIChyZXR1cm5lZEV4
Y2VwdGlvblJlZikKKyAgICAgICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvblJlZiA9IHRvUmVmKGV4
ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgICAgIGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVj
LCBleGNlcHRpb24pOworI2VuZGlmCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIEpTQ2xhc3NSZWYgSlNDbGFzc0NyZWF0ZShjb25zdCBKU0NsYXNz
RGVmaW5pdGlvbiogZGVmaW5pdGlvbikKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CkBA
IC0xNDgsMTYgKzE2NCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUZ1bmN0aW9uKEpTQ29u
dGUKICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhleGVjLCBib2R5LT5zdHJpbmcoKSkpOwogCiAg
ICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgYXJncywgbmFtZUlELCBzb3VyY2VVUkwgPyBzb3VyY2VVUkwtPnN0
cmluZygpIDogU3RyaW5nKCksIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFz
ZWRJbnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcjo6Zmlyc3QoKSkpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAg
ICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAg
ICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5y
ZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYg
KGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3Vs
dCA9IDA7Ci0gICAgfQogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQogCkBAIC0xODAsMTYg
KzE4OCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUFycmF5KEpTQ29udGV4dFIKICAgICB9
IGVsc2UKICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKIAot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAg
ICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQot
ICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAg
aWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJl
c3VsdCA9IDA7Ci0gICAgfQogCiAgICAgcmV0dXJuIHRvUmVmKHJlc3VsdCk7CiB9CkBAIC0yMDgs
MTYgKzIwOCw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZURhdGUoSlNDb250ZXh0UmUKICAg
ICAgICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBhcmd1bWVudHNbaV0pKTsKIAogICAgIEpT
T2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3REYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgYXJnTGlzdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAg
aWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGNl
cHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25W
YWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywgZXhj
ZXB0aW9uKSkKICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICB9CiAKICAgICByZXR1cm4gdG9SZWYo
cmVzdWx0KTsKIH0KQEAgLTIzNSwxNiArMjI3LDggQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtl
RXJyb3IoSlNDb250ZXh0UgogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCk7CiAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2Fn
ZSk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9u
KQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsK
LSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRp
ZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAg
ICAgICByZXN1bHQgPSAwOwotICAgIH0KIAogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQpA
QCAtMjYzLDE2ICsyNDcsOCBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VSZWdFeHAoSlNDb250
ZXh0CiAgICAgICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgYXJndW1lbnRzW2ldKSk7CiAK
ICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0UmVnRXhwKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgIGFyZ0xpc3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7
Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYo
ZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwot
I2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFs
T2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywg
ZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVk
KGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQogICAgIAogICAg
IHJldHVybiB0b1JlZihyZXN1bHQpOwogfQpAQCAtMzM5LDE1ICszMTUsNyBAQCBKU1ZhbHVlUmVm
IEpTT2JqZWN0R2V0UHJvcGVydHkoSlNDb250ZXh0CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0g
dG9KUyhvYmplY3QpOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNPYmplY3QtPmdldChleGVj
LCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMt
PmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2Vw
dGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+
dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhj
ZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0KKyAgICBoYW5kbGVF
eGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVybiB0b1JlZihleGVj
LCBqc1ZhbHVlKTsKIH0KIApAQCAtMzcyLDE1ICszNDAsNyBAQCB2b2lkIEpTT2JqZWN0U2V0UHJv
cGVydHkoSlNDb250ZXh0UmVmIGN0CiAgICAgICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5w
dXQoanNPYmplY3QsIGV4ZWMsIG5hbWUsIGpzVmFsdWUsIHNsb3QpOwogICAgIH0KIAotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAg
ICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBv
cnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAg
IGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CiAKIEpTVmFsdWVS
ZWYgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RS
ZWYgb2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CkBAIC0zOTUsMTUgKzM1NSw3IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5k
ZXgoSlMKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAKICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSBqc09iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5SW5kZXgpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAg
ICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAg
ICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBv
cnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAg
IGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIHRv
UmVmKGV4ZWMsIGpzVmFsdWUpOwogfQogCkBAIC00MjEsMTUgKzM3Myw3IEBAIHZvaWQgSlNPYmpl
Y3RTZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXgKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pT
KGV4ZWMsIHZhbHVlKTsKICAgICAKICAgICBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJ
bmRleChqc09iamVjdCwgZXhlYywgcHJvcGVydHlJbmRleCwganNWYWx1ZSwgZmFsc2UpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAg
ICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAg
ICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5y
ZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQor
ICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CiAKIGJvb2wg
SlNPYmplY3REZWxldGVQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmpl
Y3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAt
NDQ0LDE1ICszODgsNyBAQCBib29sIEpTT2JqZWN0RGVsZXRlUHJvcGVydHkoSlNDb250ZXh0UmVm
CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCiAgICAgYm9vbCByZXN1
bHQgPSBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoanNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+dm0oKSkpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhl
Yy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhj
ZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVj
LT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElF
eGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAgIGhhbmRs
ZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtNjE2LDE2ICs1NTIsOCBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0Q2FsbEFzRnVuY3Rp
b24oSlNDb250CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSB0
b1JlZihleGVjLCBjYWxsKGV4ZWMsIGpzT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVGhp
c09iamVjdCwgYXJnTGlzdCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAg
ICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAg
IGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhj
ZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
VmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4
Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTY1NywxNiArNTg1LDggQEAgSlNPYmplY3RSZWYgSlNPYmplY3RDYWxsQXNDb25z
dHJ1Y3RvcihKUwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgaSsr
KQogICAgICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGFyZ3VtZW50c1tpXSkpOwogICAg
IEpTT2JqZWN0UmVmIHJlc3VsdCA9IHRvUmVmKGNvbnN0cnVjdChleGVjLCBqc09iamVjdCwgY29u
c3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJnTGlzdCkpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhj
ZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVu
dHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRp
b24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlv
bklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHRSZWYuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
CiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiVk0u
aCIKICNpbmNsdWRlICJKU1NjcmlwdFJlZlByaXZhdGUuaCIKQEAgLTE0MiwxMiArMTQzLDEyIEBA
IEpTVmFsdWVSZWYgSlNTY3JpcHRFdmFsdWF0ZShKU0NvbnRleHRSZWYKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIEpT
VmFsdWUgaW50ZXJuYWxFeGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBpbnRlcm5hbEV4Y2VwdGlv
bjsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHRoaXNWYWx1ZVJlZiA/IHRvSlMoZXhlYywgdGhp
c1ZhbHVlUmVmKSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0
ZShleGVjLCBTb3VyY2VDb2RlKHNjcmlwdCksIHRoaXNWYWx1ZSwgJmludGVybmFsRXhjZXB0aW9u
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGV4ZWMsIFNvdXJjZUNvZGUoc2NyaXB0
KSwgdGhpc1ZhbHVlLCBpbnRlcm5hbEV4Y2VwdGlvbik7CiAgICAgaWYgKGludGVybmFsRXhjZXB0
aW9uKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0g
dG9SZWYoZXhlYywgaW50ZXJuYWxFeGNlcHRpb24pOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IHRvUmVmKGV4ZWMsIGludGVybmFsRXhjZXB0aW9uLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIEFTU0VSVChyZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1ZhbHVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWYWx1ZS5tbQkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZhbHVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW1wb3J0
ICJBUElDYXN0LmgiCiAjaW1wb3J0ICJEYXRlSW5zdGFuY2UuaCIKICNpbXBvcnQgIkVycm9yLmgi
CisjaW1wb3J0ICJFeGNlcHRpb24uaCIKICNpbXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCiAjaW1w
b3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZUludGVy
bmFsLmgiCkBAIC02NDUsOSArNjQ2LDEwIEBAIEpTQ29udGFpbmVyQ29udmVydG9yOjpUYXNrIEpT
Q29udGFpbmVyQ28KIH0KIAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotc3RhdGljIHZv
aWQgcmVwb3J0RXhjZXB0aW9uVG9JbnNwZWN0b3IoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQs
IEpTQzo6SlNWYWx1ZSBleGNlcHRpb24pCitzdGF0aWMgdm9pZCByZXBvcnRFeGNlcHRpb25Ub0lu
c3BlY3RvcihKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlKQogewogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAg
ICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246OmNyZWF0ZShleGVj
LT52bSgpLCBleGNlcHRpb25WYWx1ZSk7CiAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bik7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJl
Zi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVm
LmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Zh
bHVlUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAi
QVBJQ2FzdC5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bi5oIgogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCkBAIC01Miw2ICs1MywyMSBAQAogCiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCitzdGF0aWMgYm9vbCBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVSZWYqIHJldHVybmVkRXhjZXB0aW9uUmVmKQoreworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlv
biA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb25SZWYp
CisgICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb25SZWYgPSB0b1JlZihleGVjLCBleGNlcHRp
b24tPnZhbHVlKCkpOworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQorICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
KTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCiAjaWYgUExBVEZPUk0oTUFDKQogc3RhdGljIGJvb2wgZXZlcm5vdGVIYWNrTmVlZGVk
KCkKIHsKQEAgLTIyNCwxNSArMjQwLDggQEAgYm9vbCBKU1ZhbHVlSXNFcXVhbChKU0NvbnRleHRS
ZWYgY3R4LCBKUwogICAgIEpTVmFsdWUganNCID0gdG9KUyhleGVjLCBiKTsKIAogICAgIGJvb2wg
cmVzdWx0ID0gSlNWYWx1ZTo6ZXF1YWwoZXhlYywganNBLCBqc0IpOyAvLyBmYWxzZSBpZiBhbiBl
eGNlcHRpb24gaXMgdGhyb3duCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAg
aWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGNl
cHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25W
YWx1ZSk7Ci0jZW5kaWYKLSAgICB9CisgICAgaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywg
ZXhjZXB0aW9uKTsKKyAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNjYsMTUgKzI3
NSw3IEBAIGJvb2wgSlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0cnVjdG9yKEpTQ28KICAgICBpZiAo
IWpzQ29uc3RydWN0b3ItPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmltcGxlbWVudHNIYXNJbnN0
YW5jZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCByZXN1bHQgPSBqc0NvbnN0
cnVjdG9yLT5oYXNJbnN0YW5jZShleGVjLCBqc1ZhbHVlKTsgLy8gZmFsc2UgaWYgYW4gZXhjZXB0
aW9uIGlzIHRocm93bgotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBK
U1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChl
eGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9u
VmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUp
OwotI2VuZGlmCi0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2Vw
dGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzY4LDE2ICszNjksOCBAQCBKU1N0
cmluZ1JlZiBKU1ZhbHVlQ3JlYXRlSlNPTlN0cmluZyhKU0NvCiAgICAgU3RyaW5nIHJlc3VsdCA9
IEpTT05TdHJpbmdpZnkoZXhlYywgdmFsdWUsIGluZGVudCk7CiAgICAgaWYgKGV4Y2VwdGlvbikK
ICAgICAgICAgKmV4Y2VwdGlvbiA9IDA7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVj
LCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmpl
Y3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNl
cHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhl
YywgZXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogICAgIHJldHVybiBPcGFx
dWVKU1N0cmluZzo6Y3JlYXRlKHJlc3VsdCkubGVha1JlZigpOwogfQogCkBAIC00MDYsMTYgKzM5
OSw4IEBAIGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0eCwKICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKIAogICAgIGRvdWJsZSBudW1iZXIgPSBq
c1ZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewot
ICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAg
ICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywg
ZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVO
QUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0
aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMs
IGV4Y2VwdGlvbikpCiAgICAgICAgIG51bWJlciA9IFBOYU47Ci0gICAgfQogICAgIHJldHVybiBu
dW1iZXI7CiB9CiAKQEAgLTQzMSwxNiArNDE2LDggQEAgSlNTdHJpbmdSZWYgSlNWYWx1ZVRvU3Ry
aW5nQ29weShKU0NvbnRleAogICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUp
OwogICAgIAogICAgIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gc3RyaW5nUmVmKE9wYXF1ZUpTU3Ry
aW5nOjpjcmVhdGUoanNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1
ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAg
ICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAg
ICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVw
b3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgorICAgIGlmICho
YW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAgICAgICBzdHJpbmdS
ZWYuY2xlYXIoKTsKLSAgICB9CiAgICAgcmV0dXJuIHN0cmluZ1JlZi5yZWxlYXNlKCkubGVha1Jl
ZigpOwogfQogCkBAIC00NTYsMTYgKzQzMyw4IEBAIEpTT2JqZWN0UmVmIEpTVmFsdWVUb09iamVj
dChKU0NvbnRleHRSZWYKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsK
ICAgICAKICAgICBKU09iamVjdFJlZiBvYmplY3RSZWYgPSB0b1JlZihqc1ZhbHVlLnRvT2JqZWN0
KGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1
ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0
aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVl
KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNl
bmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQog
ICAgICAgICBvYmplY3RSZWYgPSAwOwotICAgIH0KICAgICByZXR1cm4gb2JqZWN0UmVmOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4
NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcxMiw2ICs3MTIsNyBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJvckhhbmRsaW5nU2NvcGUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJvckluc3RhbmNlLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JQcm90b3R5cGUu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb24uY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb25GdXp6LmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uSGVscGVy
cy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4ZWN1dGFibGUu
Y3BwIiAvPgpAQCAtMTUwMyw2ICsxNTA0LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcRXJyb3JIYW5kbGluZ1Njb3BlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXEVycm9ySW5zdGFuY2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcRXJyb3JQcm90b3R5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEV4Y2VwdGlvbkZ1enouaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcRXhjZXB0aW9uSGVscGVycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxFeGVjdXRhYmxlLmgiIC8+CkBAIC0xODI3LDQgKzE4MjksNCBAQAogICA8SW1wb3J0
R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChW
Q1RhcmdldHNQYXRoKVxCdWlsZEN1c3RvbWl6YXRpb25zXG1hc20udGFyZ2V0cyIgLz4KICAgPC9J
bXBvcnRHcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1By
b2plY3Q+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ai5maWx0ZXJzCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtp
bmcgY29weSkKQEAgLTE2OTgsNiArMTY5OCw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHVmFsdWVTdHJlbmd0aC5jcHAiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4K
ICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhj
ZXB0aW9uLmNwcCI+CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsQ29t
cGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uRnV6ei5j
cHAiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBA
IC00MTkwLDYgKzQxOTMsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Zh
bHVlU3RyZW5ndGguaCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb24uaCI+Cisg
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uRnV6ei5oIj4KICAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtNDQ4NSw0ICs0NDkxLDQg
QEAKICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9NQVNNPgogICA8L0l0ZW1Hcm91
cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg1MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTE2NjAsNiArMTY2MCw4IEBACiAJCUU0OURDMTZEMTJFRjI5
NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNDkxMkVGMjYxQTAwMTg0QTFGIC8q
IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUwRDRBMDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlv
blRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUwRDRBMDQxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuY3BwICovOyB9OwogCQlGRTBENEEwOTFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4
dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFMEQ0QTA3MUFCQTI0MzcwMDJGNTRCRiAvKiBHbG9iYWxDb250ZXh0V2l0
aEZpbmFsaXplclRlc3QuY3BwICovOyB9OworCQlGRTFDMEZGRDFCMTkzRTk4MDBCNTNGQ0EgLyog
RXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUxQzBGRkYxQjE5NEZEMTAwQjUz
RkNBIC8qIEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0aW9uLmNwcCAqLzsg
fTsKIAkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUIxNUYwNEE5NTAw
REYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovOyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTM4NEVFNTFBRERC
N0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4NEVFMTFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJW
TS5jcHAgKi87IH07CkBAIC0zNDYzLDYgKzM0NjUsOCBAQAogCQlGRTBENEEwNTFBQjhERDBBMDAy
RjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBFeGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvRXhl
Y3V0aW9uVGltZUxpbWl0VGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTBE
NEEwNzFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEdsb2JhbENvbnRleHRXaXRo
RmluYWxpemVyVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvR2xvYmFsQ29udGV4dFdpdGhGaW5h
bGl6ZXJUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDgxQUJB
MjQzNzAwMkY1NEJGIC8qIEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3Qu
aDsgcGF0aCA9IEFQSS90ZXN0cy9HbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4
Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxQzBGRkUxQjE5NEZEMTAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNl
cHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1
MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJ
bnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7
IHBhdGggPSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFMzg0RUUxMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9sbGFyVk0uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDQyNyw2ICs0NDMxLDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAw
RjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5
NyAvKiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3
IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCisJCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5oICovLAorCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRp
b24uY3BwICovLAogCQkJCTBGMTJERTBEMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6
LmNwcCAqLywKIAkJCQkwRjEyREUwRTE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5o
ICovLAogCQkJCTE0MjlEODc3MEVEMjFBQ0QwMEI4OTYxOSAvKiBFeGNlcHRpb25IZWxwZXJzLmNw
cCAqLywKQEAgLTU2MjQsNiArNTYzMCw3IEBACiAJCQkJRkU0RDU1QjgxQUU3MTZDQTAwNTJFNDU5
IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1MDY4NjUxQUUyNDYz
OTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzQ0
MkNCMjUxQTZDREI4QzAwNUQzRDdDIC8qIEpTSW5wdXRzLmpzb24gaW4gSGVhZGVycyAqLywKKwkJ
CQlGRTFDMEZGRDFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tM
b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcxMEUxOUY2REY4MTAwOThGNUVDIC8q
IEluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIGluIEhlYWRlcnMgKi8sCkBA
IC03NDA4LDYgKzc0MTUsNyBAQAogCQkJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1By
b21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENEMjE4NkY4QTkzMDA5
NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0
RTFFMTdCRUUyMkUwMDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkUxQzBGRkYxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3MDlGQjg2QjFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENERTE4NzEyNThEMDA5NTVDMjQgLyogSlNQ
cm9taXNlUmVhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAw
OUYxN0QwIC8qIEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1
bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMywxMSArMTMzLDExIEBAIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2EKICAgICAgICAgcmV0dXJuIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlKCk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICBKU1ZhbHVl
IGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICBpZiAobV9jYWxsSGFu
ZGxlcikKLSAgICAgICAgcmVzdWx0ID0gbV9jYWxsSGFuZGxlcihtX2V4ZWMsIGZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIG1fYXJndW1lbnRzLCAmZXhjZXB0aW9uKTsK
KyAgICAgICAgcmVzdWx0ID0gbV9jYWxsSGFuZGxlcihtX2V4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIG1fYXJndW1lbnRzLCBleGNlcHRpb24pOwogICAgIGVs
c2UKLSAgICAgICAgcmVzdWx0ID0gSlNDOjpjYWxsKG1fZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBl
LCBjYWxsRGF0YSwgdGhpc09iamVjdCwgbV9hcmd1bWVudHMsICZleGNlcHRpb24pOworICAgICAg
ICByZXN1bHQgPSBKU0M6OmNhbGwobV9leGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCB0aGlzT2JqZWN0LCBtX2FyZ3VtZW50cywgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRp
b24pIHsKICAgICAgICAgaGFkRXhjZXB0aW9uID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmgJKHJldmlzaW9u
IDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlv
bkNhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogCiBjbGFz
cyBKU19FWFBPUlRfUFJJVkFURSBTY3JpcHRGdW5jdGlvbkNhbGwgOiBwdWJsaWMgU2NyaXB0Q2Fs
bEFyZ3VtZW50SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTVmFsdWUgKCpT
Y3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1Zh
bHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNh
bGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdM
aXN0JiBhcmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbik7CisgICAgdHlwZWRlZiBKU0M6OkpT
VmFsdWUgKCpTY3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25z
dCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3Qg
SlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkV4Y2VwdGlvbiomIGV4Y2VwdGlvbik7CiAgICAgU2Ny
aXB0RnVuY3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBTY3JpcHRGdW5jdGlvbkNhbGxIYW5kbGVyIGhhbmRsZXIgPSBudWxscHRyKTsK
ICAgICBTY3JpcHRWYWx1ZSBjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbik7CiAgICAgU2NyaXB0VmFs
dWUgY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyAr
MTEzLDcgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1c2hfd2l0aF9zY29wZSIsICJs
ZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcG9wX3Njb3BlIiwgImxl
bmd0aCIgOiAyIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXNoX25hbWVfc2NvcGUi
LCAibGVuZ3RoIiA6IDUgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NhdGNoIiwgImxl
bmd0aCIgOiAyIH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYXRjaCIsICJsZW5ndGgi
IDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdGhyb3ciLCAibGVuZ3RoIiA6IDIg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Rocm93X3N0YXRpY19lcnJvciIsICJsZW5n
dGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVidWciLCAibGVuZ3RoIiA6
IDMgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZVVzZURlZi5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcgKzMwMyw2IEBA
IHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2RlQmwKICAgICBjYXNlIG9wX3Jl
c29sdmVfc2NvcGU6CiAgICAgY2FzZSBvcF9zdHJjYXQ6CiAgICAgY2FzZSBvcF90b19wcmltaXRp
dmU6Ci0gICAgY2FzZSBvcF9jYXRjaDoKICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgogICAgIGNh
c2Ugb3BfbmV3X2FycmF5OgogICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKQEAgLTM3NCw2
ICszNzMsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAg
ICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBvcF9jYXRj
aDoKICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OiB7CiAgICAgICAgIGZ1
bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCk7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2Rl
SUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0ODQsNyArMTQ4NCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBvcF9jYXRjaDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJh
bmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYXRjaCIsIHIwKTsKKyAgICAgICAgICAgIGlu
dCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2F0Y2giKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRh
dGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3Ro
cm93OiB7CkBAIC0yODc4LDcgKzI4ODAsNyBAQCBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVk
UmVwbGFjZW1lbnQoCiB9CiAjZW5kaWYKIAotSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxl
ckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorSGFuZGxlckluZm8q
IENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0LCBib29sIHJlcXVpcmVDYXRjaEhhbmRsZXIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYnl0
ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogCkBAIC0yODg4LDYgKzI4OTAs
OSBAQCBIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvCiAgICAgVmVjdG9y
PEhhbmRsZXJJbmZvPiYgZXhjZXB0aW9uSGFuZGxlcnMgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhjZXB0aW9uSGFuZGxlcnMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25I
YW5kbGVyc1tpXTsKKyAgICAgICAgaWYgKHJlcXVpcmVDYXRjaEhhbmRsZXIgJiYgIWhhbmRsZXIu
aXNDYXRjaEhhbmRsZXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIC8vIEhh
bmRsZXJzIGFyZSBvcmRlcmVkIGlubmVybW9zdCBmaXJzdCwgc28gdGhlIGZpcnN0IGhhbmRsZXIg
d2UgZW5jb3VudGVyCiAgICAgICAgIC8vIHRoYXQgY29udGFpbnMgdGhlIHNvdXJjZSBhZGRyZXNz
IGlzIHRoZSBjb3JyZWN0IGhhbmRsZXIgdG8gdXNlLgogICAgICAgICBpZiAoaGFuZGxlci5zdGFy
dCA8PSBieXRlY29kZU9mZnNldCAmJiBoYW5kbGVyLmVuZCA+IGJ5dGVjb2RlT2Zmc2V0KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODUsNyArMTg1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
aW5kZXggPj0gbV9udW1WYXJzOwogICAgIH0KIAotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9y
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEhhbmRsZXJJbmZv
KiBoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGJvb2wg
cmVxdWlyZUNhdGNoSGFuZGxlciA9IGZhbHNlKTsKICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyRm9y
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwogICAgIHVuc2lnbmVkIGNv
bHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKICAg
ICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0LCBpbnQmIGRpdm90LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0hhbmRsZXJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0hhbmRsZXJJbmZvLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIGVudW0gY2xhc3MgSGFuZGxlclR5cGUgewogc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7CiAg
ICAgSGFuZGxlclR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEhhbmRsZXJU
eXBlPih0eXBlQml0cyk7IH0KICAgICB2b2lkIHNldFR5cGUoSGFuZGxlclR5cGUgdHlwZSkgeyB0
eXBlQml0cyA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKTsgfQotICAgIAorCiAgICAgY29u
c3QgY2hhciogdHlwZU5hbWUoKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKQEAg
LTU1LDkgKzU1LDkgQEAgc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIAorCiAgICAgYm9vbCBpc0NhdGNoSGFuZGxl
cigpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBIYW5kbGVyVHlwZTo6Q2F0Y2g7IH0KLSAgICAK
KwogICAgIHVpbnQzMl90IHN0YXJ0OwogICAgIHVpbnQzMl90IGVuZDsKICAgICB1aW50MzJfdCB0
YXJnZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1MjgsNyArMjUyOCw3IEBAIFRyeURhdGEqIEJ5dGVjb2RlR2VuZXJhdG9y
OjpwdXNoVHJ5KExhYmUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kRW1pdENhdGNoKFRyeURhdGEqIHRyeURhdGEsIFJlZ2lz
dGVySUQqIHRhcmdldFJlZ2lzdGVyLCBMYWJlbCogZW5kLCBIYW5kbGVyVHlwZSBoYW5kbGVyVHlw
ZSkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFRyeUFuZEVtaXRDYXRjaChUcnlEYXRhKiB0
cnlEYXRhLCBSZWdpc3RlcklEKiBleGNlcHRpb25SZWdpc3RlciwgUmVnaXN0ZXJJRCogdGhyb3du
VmFsdWVSZWdpc3RlciwgTGFiZWwqIGVuZCwgSGFuZGxlclR5cGUgaGFuZGxlclR5cGUpCiB7CiAg
ICAgbV91c2VzRXhjZXB0aW9ucyA9IHRydWU7CiAgICAgCkBAIC0yNTQ2LDggKzI1NDYsOCBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kCiAgICAgdHJ5UmFuZ2UudHJ5
RGF0YS0+aGFuZGxlclR5cGUgPSBoYW5kbGVyVHlwZTsKIAogICAgIGVtaXRPcGNvZGUob3BfY2F0
Y2gpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXRSZWdpc3Rlci0+aW5kZXgoKSk7
Ci0gICAgcmV0dXJuIHRhcmdldFJlZ2lzdGVyOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChl
eGNlcHRpb25SZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRo
cm93blZhbHVlUmVnaXN0ZXItPmluZGV4KCkpOwogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC0yNzYw
LDcgKzI3NjAsMTEgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAog
ICAgICAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVlbmNlIGZvciB0aHJvdy1lZCBjb250cm9sIGZs
b3cuCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gY2F0Y2hIZXJlID0gZW1p
dExhYmVsKG5ld0xhYmVsKCkuZ2V0KCkpOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGV4Y2VwdGlvblJlZ2lzdGVyID0gcG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIG5ld1RlbXBv
cmFyeSgpLCBjYXRjaEhlcmUuZ2V0KCksIEhhbmRsZXJUeXBlOjpTeW50aGVzaXplZEZpbmFsbHkp
OworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gbmV3
VGVtcG9yYXJ5KCk7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhyb3duVmFsdWVS
ZWdpc3RlciA9IG5ld1RlbXBvcmFyeSgpOworICAgICAgICAgICAgcG9wVHJ5QW5kRW1pdENhdGNo
KHRyeURhdGEsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLAorICAgICAgICAgICAgICAgIHRocm93
blZhbHVlUmVnaXN0ZXIuZ2V0KCksIGNhdGNoSGVyZS5nZXQoKSwgSGFuZGxlclR5cGU6OlN5bnRo
ZXNpemVkRmluYWxseSk7CisKICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gY2F0Y2hEb25lID0g
bmV3TGFiZWwoKTsKIAogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVybk1ldGhv
ZCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlO
YW1lcygpLnJldHVybktleXdvcmQpOwpAQCAtMjc3OCw3ICsyNzgyLDggQEAgdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAogICAgICAgICAgICAgZW1pdFRocm93KGV4Y2Vw
dGlvblJlZ2lzdGVyLmdldCgpKTsKIAogICAgICAgICAgICAgLy8gQWJzb3JiIGV4Y2VwdGlvbi4K
LSAgICAgICAgICAgIHBvcFRyeUFuZEVtaXRDYXRjaChyZXR1cm5DYWxsVHJ5RGF0YSwgbmV3VGVt
cG9yYXJ5KCksIGNhdGNoRG9uZS5nZXQoKSwgSGFuZGxlclR5cGU6OlN5bnRoZXNpemVkRmluYWxs
eSk7CisgICAgICAgICAgICBwb3BUcnlBbmRFbWl0Q2F0Y2gocmV0dXJuQ2FsbFRyeURhdGEsIG5l
d1RlbXBvcmFyeSgpLAorICAgICAgICAgICAgICAgIG5ld1RlbXBvcmFyeSgpLCBjYXRjaERvbmUu
Z2V0KCksIEhhbmRsZXJUeXBlOjpTeW50aGVzaXplZEZpbmFsbHkpOwogICAgICAgICAgICAgZW1p
dFRocm93KGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKICAgICAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1Myw3ICs1NTMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gU3RhcnQgYSB0cnkgYmxvY2suICdzdGFy
dCcgbXVzdCBoYXZlIGJlZW4gZW1pdHRlZC4KICAgICAgICAgVHJ5RGF0YSogcHVzaFRyeShMYWJl
bCogc3RhcnQpOwogICAgICAgICAvLyBFbmQgYSB0cnkgYmxvY2suICdlbmQnIG11c3QgaGF2ZSBi
ZWVuIGVtaXR0ZWQuCi0gICAgICAgIFJlZ2lzdGVySUQqIHBvcFRyeUFuZEVtaXRDYXRjaChUcnlE
YXRhKiwgUmVnaXN0ZXJJRCogdGFyZ2V0UmVnaXN0ZXIsIExhYmVsKiBlbmQsIEhhbmRsZXJUeXBl
KTsKKyAgICAgICAgdm9pZCBwb3BUcnlBbmRFbWl0Q2F0Y2goVHJ5RGF0YSosIFJlZ2lzdGVySUQq
IGV4Y2VwdGlvblJlZ2lzdGVyLCBSZWdpc3RlcklEKiB0aHJvd25WYWx1ZVJlZ2lzdGVyLCBMYWJl
bCogZW5kLCBIYW5kbGVyVHlwZSk7CiAKICAgICAgICAgdm9pZCBlbWl0VGhyb3coUmVnaXN0ZXJJ
RCogZXhjKQogICAgICAgICB7IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODgxLDcgKzI4ODEsOSBAQCB2b2lkIFRyeU5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyCiAKICAgICAgICAgLy8gVW5jYXVnaHQgZXhjZXB0aW9uIHBhdGg6IHRoZSBj
YXRjaCBibG9jay4KICAgICAgICAgUmVmUHRyPExhYmVsPiBoZXJlID0gZ2VuZXJhdG9yLmVtaXRM
YWJlbChnZW5lcmF0b3IubmV3TGFiZWwoKS5nZXQoKSk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBleGNlcHRpb25SZWdpc3RlciA9IGdlbmVyYXRvci5wb3BUcnlBbmRFbWl0Q2F0Y2godHJ5
RGF0YSwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBoZXJlLmdldCgpLCBIYW5kbGVyVHlwZTo6
Q2F0Y2gpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVnaXN0ZXIgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aHJv
d25WYWx1ZVJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBnZW5l
cmF0b3IucG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgp
LCB0aHJvd25WYWx1ZVJlZ2lzdGVyLmdldCgpLCBoZXJlLmdldCgpLCBIYW5kbGVyVHlwZTo6Q2F0
Y2gpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fZmluYWxseUJsb2NrKSB7CiAgICAgICAgICAg
ICAvLyBJZiB0aGUgY2F0Y2ggYmxvY2sgdGhyb3dzIGFuIGV4Y2VwdGlvbiBhbmQgd2UgaGF2ZSBh
IGZpbmFsbHkgYmxvY2ssIHRoZW4gdGhlIGZpbmFsbHkKQEAgLTI4ODksNyArMjg5MSw3IEBAIHZv
aWQgVHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKICAgICAgICAgICAgIHRyeURh
dGEgPSBnZW5lcmF0b3IucHVzaFRyeShoZXJlLmdldCgpKTsKICAgICAgICAgfQogCi0gICAgICAg
IGdlbmVyYXRvci5lbWl0UHVzaENhdGNoU2NvcGUoZ2VuZXJhdG9yLnNjb3BlUmVnaXN0ZXIoKSwg
bV9leGNlcHRpb25JZGVudCwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksIERvbnREZWxldGUpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdFB1c2hDYXRjaFNjb3BlKGdlbmVyYXRvci5zY29wZVJlZ2lz
dGVyKCksIG1fdGhyb3duVmFsdWVJZGVudCwgdGhyb3duVmFsdWVSZWdpc3Rlci5nZXQoKSwgRG9u
dERlbGV0ZSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KG1fdHJ5
QmxvY2stPmVuZE9mZnNldCgpICsgMSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3Qs
IG1fY2F0Y2hCbG9jayk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UG9wU2NvcGUoZ2VuZXJhdG9y
LnNjb3BlUmVnaXN0ZXIoKSk7CkBAIC0yOTEyLDEwICsyOTE0LDEyIEBAIHZvaWQgVHJ5Tm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGZp
bmFsbHlFbmRMYWJlbC5nZXQoKSk7CiAKICAgICAgICAgLy8gVW5jYXVnaHQgZXhjZXB0aW9uIHBh
dGg6IGludm9rZSB0aGUgZmluYWxseSBibG9jaywgdGhlbiByZS10aHJvdyB0aGUgZXhjZXB0aW9u
LgotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcEV4Y2VwdGlvblJlZ2lzdGVyID0gZ2Vu
ZXJhdG9yLnBvcFRyeUFuZEVtaXRDYXRjaCh0cnlEYXRhLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIHByZUZpbmFsbHlMYWJlbC5nZXQoKSwgSGFuZGxlclR5cGU6OkZpbmFsbHkpOworICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aHJvd25WYWx1ZVJlZ2lzdGVy
ID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBnZW5lcmF0b3IucG9wVHJ5QW5k
RW1pdENhdGNoKHRyeURhdGEsIGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLCB0aHJvd25WYWx1ZVJl
Z2lzdGVyLmdldCgpLCBwcmVGaW5hbGx5TGFiZWwuZ2V0KCksIEhhbmRsZXJUeXBlOjpGaW5hbGx5
KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3coZmluYWxseVN0YXJ0
T2Zmc2V0KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9maW5hbGx5QmxvY2sp
OwotICAgICAgICBnZW5lcmF0b3IuZW1pdFRocm93KHRlbXBFeGNlcHRpb25SZWdpc3Rlci5nZXQo
KSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VGhyb3coZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkp
OwogCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZmluYWxseUVuZExhYmVsLmdldCgpKTsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cobV9maW5hbGx5QmxvY2st
PmVuZE9mZnNldCgpICsgMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw3ICs0ODcsNyBA
QCBib29sIERlYnVnZ2VyOjpoYXNCcmVha3BvaW50KFNvdXJjZUlEIHNvCiAgICAgLy8gc28gbWFr
ZSBpdCBsb29rcyBsaWtlIHRoZSBkZWJ1Z2dlciBpcyBhbHJlYWR5IHBhdXNlZC4KICAgICBUZW1w
b3JhcnlQYXVzZWRTdGF0ZSBwYXVzZWRTdGF0ZSgqdGhpcyk7CiAKLSAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICBEZWJ1Z2dlckNhbGxGcmFtZSog
ZGVidWdnZXJDYWxsRnJhbWUgPSBjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUoKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGRlYnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0ZShicmVha3BvaW50LT5jb25k
aXRpb24sIGV4Y2VwdGlvbik7CiAKQEAgLTY5NSwxMyArNjk1LDEzIEBAIHZvaWQgRGVidWdnZXI6
OnBhdXNlSWZOZWVkZWQoQ2FsbEZyYW1lKiAKICAgICB9CiB9CiAKLXZvaWQgRGVidWdnZXI6OmV4
Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNlcHRpb24sIGJvb2wgaGFz
SGFuZGxlcikKK3ZvaWQgRGVidWdnZXI6OmV4Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNWYWx1ZSBleGNlcHRpb24sIGJvb2wgaGFzQ2F0Y2hIYW5kbGVyKQogewogICAgIGlmIChtX2lz
UGF1c2VkKQogICAgICAgICByZXR1cm47CiAKICAgICBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHJl
YXNvbigqdGhpcywgUGF1c2VkRm9yRXhjZXB0aW9uKTsKLSAgICBpZiAobV9wYXVzZU9uRXhjZXB0
aW9uc1N0YXRlID09IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8IChtX3BhdXNlT25FeGNlcHRpb25z
U3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAmJiAhaGFzSGFuZGxlcikpIHsKKyAg
ICBpZiAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8
IChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAm
JiAhaGFzQ2F0Y2hIYW5kbGVyKSkgewogICAgICAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0g
dHJ1ZTsKICAgICAgICAgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCShyZXZp
c2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdm9pZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgU291cmNlUHJvdmlkZXIqLCBpbnQgZXJy
b3JMaW5lTnVtYmVyLCBjb25zdCBXVEY6OlN0cmluZyYgZXJyb3JNZXNzYWdlKSA9IDA7CiAKLSAg
ICB2b2lkIGV4Y2VwdGlvbihDYWxsRnJhbWUqLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBib29s
IGhhc0hhbmRsZXIpOworICAgIHZvaWQgZXhjZXB0aW9uKENhbGxGcmFtZSosIEpTVmFsdWUgZXhj
ZXB0aW9uVmFsdWUsIGJvb2wgaGFzQ2F0Y2hIYW5kbGVyKTsKICAgICB2b2lkIGF0U3RhdGVtZW50
KENhbGxGcmFtZSopOwogICAgIHZvaWQgY2FsbEV2ZW50KENhbGxGcmFtZSopOwogICAgIHZvaWQg
cmV0dXJuRXZlbnQoQ2FsbEZyYW1lKik7CkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhKU0dsb2JhbE9iamVj
dCopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUJyZWFrcG9pbnRI
aXQoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBCcmVha3BvaW50JikgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIGhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlvbihFeGVjU3RhdGUqLCBKU1Zh
bHVlIGV4Y2VwdGlvbikgY29uc3QgeyBVTlVTRURfUEFSQU0oZXhjZXB0aW9uKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24oRXhlY1N0YXRl
KiwgRXhjZXB0aW9uKikgY29uc3QgeyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBhdXNlKEpT
R2xvYmFsT2JqZWN0KiwgUmVhc29uRm9yUGF1c2UpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyRXZhbEVuYWJsZXIuaCIKICNpbmNsdWRl
ICJEZWJ1Z2dlclNjb3BlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaCIKQEAgLTE3Niw3ICsxNzcsNyBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZy
YW1lOjp0aGlzVmFsdWUoKSBjCiB9CiAKIC8vIEV2YWx1YXRlIHNvbWUgSmF2YVNjcmlwdCBjb2Rl
IGluIHRoZSBzY29wZSBvZiB0aGlzIGZyYW1lLgotSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6
ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIEpTVmFsdWUmIGV4Y2VwdGlvbikKK0pTVmFs
dWUgRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBFeGNl
cHRpb24qJiBleGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBtX2NhbGxGcmFtZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCShyZXZpc2lvbiAxODUxMTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IERlYnVnZ2VyU2NvcGU7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiB0eXBl
ZGVmIEV4ZWNTdGF0ZSBDYWxsRnJhbWU7CiAKQEAgLTY2LDcgKzY3LDcgQEAgcHVibGljOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBmdW5jdGlvbk5hbWUoKSBjb25zdDsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBUeXBlIHR5cGUoKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBK
U1ZhbHVlIHRoaXNWYWx1ZSgpIGNvbnN0OwotICAgIEpTVmFsdWUgZXZhbHVhdGUoY29uc3QgU3Ry
aW5nJiwgSlNWYWx1ZSYgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0
cmluZyYsIEV4Y2VwdGlvbiomKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9jYWxsRnJhbWU7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGludmFsaWRhdGUo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5LDkgKzEzOSw5IEBAIERlcHJlY2F0ZWQ6OlNjcmlwdE9iamVjdCBJbmpl
Y3RlZFNjcmlwdE0KICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NyaXB0U3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBKU1ZhbHVlIGdsb2JhbFRoaXNWYWx1ZSA9
IHNjcmlwdFN0YXRlLT5nbG9iYWxUaGlzVmFsdWUoKTsKIAotICAgIEpTVmFsdWUgZXZhbHVhdGlv
bkV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV2YWx1YXRpb25FeGNlcHRpb247CiAgICAgSW5z
cGVjdG9yRXZhbHVhdGVIYW5kbGVyIGV2YWx1YXRlSGFuZGxlciA9IG1fZW52aXJvbm1lbnQuZXZh
bHVhdGVIYW5kbGVyKCk7Ci0gICAgSlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gZXZhbHVhdGVIYW5k
bGVyKHNjcmlwdFN0YXRlLCBzb3VyY2VDb2RlLCBnbG9iYWxUaGlzVmFsdWUsICZldmFsdWF0aW9u
RXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBldmFsdWF0ZUhhbmRsZXIo
c2NyaXB0U3RhdGUsIHNvdXJjZUNvZGUsIGdsb2JhbFRoaXNWYWx1ZSwgZXZhbHVhdGlvbkV4Y2Vw
dGlvbik7CiAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAgIHJldHVybiBEZXBy
ZWNhdGVkOjpTY3JpcHRPYmplY3QoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9u
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMyArMzMsMTQgQEAgY2xhc3MgU3RvcHdhdGNo
OwogfQogCiBuYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIFNvdXJjZUNv
ZGU7CiB9CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIEpTQzo6SlNWYWx1ZSAo
Kkluc3BlY3RvckZ1bmN0aW9uQ2FsbEhhbmRsZXIpKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IEpT
Qzo6Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6
OkFyZ0xpc3QmIGFyZ3MsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKTsKLXR5cGVkZWYgSlNDOjpK
U1ZhbHVlICgqSW5zcGVjdG9yRXZhbHVhdGVIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6U291cmNlQ29kZSYsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6SlNWYWx1ZSog
ZXhjZXB0aW9uKTsKK3R5cGVkZWYgSlNDOjpKU1ZhbHVlICgqSW5zcGVjdG9yRnVuY3Rpb25DYWxs
SGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEs
IEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpF
eGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbik7Cit0eXBlZGVmIEpTQzo6SlNWYWx1ZSAoKklu
c3BlY3RvckV2YWx1YXRlSGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJj
ZUNvZGUmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkV4Y2VwdGlvbiomIHJldHVybmVk
RXhjZXB0aW9uKTsKIAogY2xhc3MgSW5zcGVjdG9yRW52aXJvbm1lbnQgewogcHVibGljOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdElu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW5jbHVkZSAiQ29tcGxldGlvbi5oIgogI2luY2x1ZGUgIkNvbnNvbGVNZXNzYWdlLmgiCiAjaW5j
bHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5j
bHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKQEAgLTE4OCw3ICsxODksNyBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6CiAjZW5kaWYKIH0KIAotdm9p
ZCBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6OnJlcG9ydEFQSUV4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXhjZXB0aW9uKQordm9pZCBKU0dsb2JhbE9iamVjdElu
c3BlY3RvckNvbnRyb2xsZXI6OnJlcG9ydEFQSUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4
Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNl
cHRpb24oZXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAxLDcgKzIwMiw3IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjoKIAogICAgIC8vIEZJWE1FOiA8
aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNwZWN0b3I6IFNob3VsZCBub3QgZXZh
bHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCiAgICAgLy8gSWYgdGhpcyBpcyBh
IGN1c3RvbSBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRvIHRyeSBhbmQg
Z2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRpb24uCi0gICAg
U3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAg
IGlmIChKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OmxvZ1RvU3lzdGVtQ29uc29sZSgpKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmgJKHJldmlzaW9uIDE4
NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJ
bnNwZWN0b3JDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgY2xh
c3MgU3RvcHdhdGNoOwogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENvbnNvbGVDbGllbnQ7Citj
bGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsK
IGNsYXNzIEpTVmFsdWU7CkBAIC04MSw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElu
Y2x1ZGVzTmF0aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4Y2VwdGlvbnMoYm9vbCBpbmNsdWRl
c05hdGl2ZUNhbGxTdGFjaykgeyBtX2luY2x1ZGVOYXRpdmVDYWxsU3RhY2tXaXRoRXhjZXB0aW9u
cyA9IGluY2x1ZGVzTmF0aXZlQ2FsbFN0YWNrOyB9CiAKICAgICB2b2lkIHBhdXNlKCk7Ci0gICAg
dm9pZCByZXBvcnRBUElFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhj
ZXB0aW9uKTsKKyAgICB2b2lkIHJlcG9ydEFQSUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RXhjZXB0aW9uKik7CiAKICAgICBKU0M6OkNvbnNvbGVDbGllbnQqIGNvbnNvbGVDbGllbnQo
KSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmgJKHJldmlz
aW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxP
YmplY3RTY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBA
IHByaXZhdGU6CiAgICAgLy8gTk9URTogQ3VycmVudGx5IGFsbCBleGNlcHRpb25zIGFyZSByZXBv
cnRlZCBhdCB0aGUgQVBJIGJvdW5kYXJ5IHRocm91Z2ggcmVwb3J0QVBJRXhjZXB0aW9uLgogICAg
IC8vIFVudGlsIGEgdGltZSBjb21lcyB3aGVyZSBhbiBleGNlcHRpb24gY2FuIGJlIGNhdXNlZCBv
dXRzaWRlIG9mIHRoZSBBUEkgKGUuZy4gc2V0VGltZW91dAogICAgIC8vIG9yIHNvbWUgb3RoZXIg
YXN5bmMgb3BlcmF0aW9uIGluIGEgcHVyZSBKU0NvbnRleHQpIHdlIGNhbiBpZ25vcmUgZXhjZXB0
aW9ucyByZXBvcnRlZCBoZXJlLgotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZpcnR1
YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiop
IGNvbnN0IG92ZXJyaWRlIHsgfQogCiAgICAgTGlzdGVuZXJTZXQgbV9saXN0ZW5lcnM7CiAgICAg
SlNDOjpKU0dsb2JhbE9iamVjdCYgbV9nbG9iYWxPYmplY3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKICNpbmNsdWRlICJFcnJvci5oIgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJK
U0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBl
LmgiCkBAIC03NSw3ICs3Niw3IEBAIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6fkpTSmF2YVNjcmlw
dENhbGwKIAogSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIGV4Y2Vw
dGlvbjsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwoKS5ldmFsdWF0ZShleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIGV4Y2VwdGlvbik7CiAgICAgaWYgKGV4
Y2VwdGlvbikKICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRp
b24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2Fs
bEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
YXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5
R2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+dm1FbnRy
eUdsb2JhbE9iamVjdCgpOyB9CiAKICAgICBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7IH0KLSAgICBKU0M6OkpT
VmFsdWUgZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIEpTQzo6SlNWYWx1ZSYgZXhjZXB0
aW9uKSBjb25zdCAgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoc2NyaXB0
LCBleGNlcHRpb24pOyB9CisgICAgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0cmluZyYg
c2NyaXB0LCBKU0M6OkV4Y2VwdGlvbiomIGV4Y2VwdGlvbikgY29uc3QgIHsgcmV0dXJuIG1fZGVi
dWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKHNjcmlwdCwgZXhjZXB0aW9uKTsgfQogCiBwcml2YXRl
OgogICAgIEphdmFTY3JpcHRDYWxsRnJhbWUoUGFzc1JlZlB0cjxKU0M6OkRlYnVnZ2VyQ2FsbEZy
YW1lPik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxT
dGFja0ZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJTY3JpcHRDYWxsU3Rh
Y2tGYWN0b3J5LmgiCiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIlNjcmlwdEFyZ3VtZW50cy5oIgpAQCAtMTI4LDEwICsxMjksMTAgQEAgc3RhdGlj
IHZvaWQgZXh0cmFjdFNvdXJjZUluZm9ybWF0aW9uRnJvbQogICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CiB9CiAKLVBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxs
U3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUmIGV4
Y2VwdGlvbiwgc2l6ZV90IG1heFN0YWNrU2l6ZSkKK1Bhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNr
PiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uLCBzaXplX3QgbWF4U3RhY2tTaXplKQogewogICAg
IFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+IGZyYW1lczsKLSAgICBSZWZDb3VudGVkQXJyYXk8U3Rh
Y2tGcmFtZT4gc3RhY2tUcmFjZSA9IGV4ZWMtPnZtKCkuZXhjZXB0aW9uU3RhY2soKTsKKyAgICBS
ZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZSA9IGV4Y2VwdGlvbi0+c3RhY2so
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpICYmIGkgPCBt
YXhTdGFja1NpemU7IGkrKykgewogICAgICAgICB1bnNpZ25lZCBsaW5lOwogICAgICAgICB1bnNp
Z25lZCBjb2x1bW47CkBAIC0xNDEsOCArMTQyLDggQEAgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3Rh
Y2s+IGNyZWF0ZVNjcmlwdAogICAgIH0KIAogICAgIC8vIEZhbGxiYWNrIHRvIGdldHRpbmcgYXQg
bGVhc3QgdGhlIGxpbmUgYW5kIHNvdXJjZVVSTCBmcm9tIHRoZSBleGNlcHRpb24gb2JqZWN0IGlm
IGl0IGhhcyB2YWx1ZXMgYW5kIHRoZSBleGNlcHRpb25TdGFjayBkb2Vzbid0LgotICAgIEpTT2Jq
ZWN0KiBleGNlcHRpb25PYmplY3QgPSBleGNlcHRpb24udG9PYmplY3QoZXhlYyk7Ci0gICAgaWYg
KGV4Y2VwdGlvbi5pc09iamVjdCgpKSB7CisgICAgaWYgKGV4Y2VwdGlvbi0+dmFsdWUoKS5pc09i
amVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3QgPSBleGNlcHRpb24t
PnZhbHVlKCkudG9PYmplY3QoZXhlYyk7CiAgICAgICAgIGludCBsaW5lTnVtYmVyOwogICAgICAg
ICBpbnQgY29sdW1uTnVtYmVyOwogICAgICAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJMOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0
b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3Jp
cHRDYWxsU3RhY2tGYWN0b3J5LmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNl
IEpTQyB7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBKU1ZhbHVl
OwogfQpAQCAtNDcsNyArNDgsNyBAQCBjbGFzcyBTY3JpcHRDYWxsU3RhY2s7CiAvLyBGSVhNRTog
VGhlIHN1YnRsZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZXNlIHNob3VsZCBiZSBlbGltaW5hdGVk
LgogSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNj
cmlwdENhbGxTdGFjayhKU0M6OkV4ZWNTdGF0ZSosIHNpemVfdCBtYXhTdGFja1NpemUpOwogSlNf
RVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdENh
bGxTdGFja0ZvckNvbnNvbGUoSlNDOjpFeGVjU3RhdGUqLCBzaXplX3QgbWF4U3RhY2tTaXplKTsK
LUpTX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3Jp
cHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlJiBl
eGNlcHRpb24sIHNpemVfdCBtYXhTdGFja1NpemUpOworSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1Jl
ZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiosIHNpemVfdCBtYXhTdGFja1NpemUpOwog
SlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGNyZWF0ZVNjcmlw
dEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KTsK
IAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkRlYnVn
Z2VyQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJTY29wZS5oIgorI2luY2x1ZGUgIkV4
Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTSmF2YVNjcmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IkpTTG9jay5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKQEAgLTkzLDcgKzk0
LDcgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3BvaQogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBTY3JpcHRCcmVha3BvaW50QWN0aW9uVHlwZUV2YWx1YXRl
OiB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgICAgICBFeGNlcHRpb24qIGV4Y2Vw
dGlvbjsKICAgICAgICAgZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKGJyZWFrcG9pbnRBY3Rp
b24uZGF0YSwgZXhjZXB0aW9uKTsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAg
IHJlcG9ydEV4Y2VwdGlvbihkZWJ1Z2dlckNhbGxGcmFtZS0+ZXhlYygpLCBleGNlcHRpb24pOwpA
QCAtMTAzLDEzICsxMDQsMTMgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVh
a3BvaQogICAgICAgICBkaXNwYXRjaEJyZWFrcG9pbnRBY3Rpb25Tb3VuZChkZWJ1Z2dlckNhbGxG
cmFtZS0+ZXhlYygpLCBicmVha3BvaW50QWN0aW9uLmlkZW50aWZpZXIpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlUHJvYmU6IHsKLSAgICAgICAg
SlNWYWx1ZSBleGNlcHRpb247CisgICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uOwogICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGRlYnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0ZShicmVha3BvaW50
QWN0aW9uLmRhdGEsIGV4Y2VwdGlvbik7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAg
ICAgICByZXBvcnRFeGNlcHRpb24oZGVidWdnZXJDYWxsRnJhbWUtPmV4ZWMoKSwgZXhjZXB0aW9u
KTsKICAgICAgICAgCiAgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSA9IGRlYnVnZ2VyQ2Fs
bEZyYW1lLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB3cmFwcGVkUmVzdWx0ID0gRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUoc3RhdGUtPnZtKCksIGV4Y2VwdGlvbiA/IGV4Y2VwdGlvbiA6IHJlc3VsdCk7CisgICAg
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHdyYXBwZWRSZXN1bHQgPSBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZShzdGF0ZS0+dm0oKSwgZXhjZXB0aW9uID8gZXhjZXB0aW9uLT52YWx1ZSgpIDog
cmVzdWx0KTsKICAgICAgICAgZGlzcGF0Y2hCcmVha3BvaW50QWN0aW9uUHJvYmUoc3RhdGUsIGJy
ZWFrcG9pbnRBY3Rpb24sIHdyYXBwZWRSZXN1bHQpOwogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0zMDIsNyArMzAzLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlQnJlYWtwb2lu
dAogICAgIH0KIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlRXhjZXB0aW9uSW5C
cmVha3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZXhj
ZXB0aW9uKSBjb25zdAordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlRXhjZXB0aW9uSW5C
cmVha3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkV4Y2VwdGlvbiog
ZXhjZXB0aW9uKSBjb25zdAogewogICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24p
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1Nl
cnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2Ny
aXB0RGVidWdTZXJ2ZXIuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoSlNDOjpK
U0dsb2JhbE9iamVjdCopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcnVuRXZlbnRMb29wV2hpbGVQ
YXVzZWQoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudFNjcmlwdChKU0M6OkV4ZWNT
dGF0ZSopIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJl
cG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKikgY29uc3QgPSAw
OwogCiAgICAgYm9vbCBldmFsdWF0ZUJyZWFrcG9pbnRBY3Rpb24oY29uc3QgU2NyaXB0QnJlYWtw
b2ludEFjdGlvbiYpOwogCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgc291cmNlUGFyc2VkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpTb3VyY2VQcm92aWRlcios
IGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNc2cpIG92ZXJyaWRlIGZpbmFsOwog
ICAgIHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhKU0M6OkpTR2xvYmFsT2JqZWN0Kikg
b3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVC
cmVha3BvaW50SGl0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OkJyZWFrcG9pbnQm
KSBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXhjZXB0aW9uSW5CcmVh
a3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbikg
Y29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV4Y2VwdGlvbklu
QnJlYWtwb2ludENvbmRpdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKikgY29u
c3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBhdXNlKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkRlYnVnZ2VyOjpSZWFzb25Gb3JQYXVzZSkgb3ZlcnJpZGUgZmlu
YWw7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMo
KSBvdmVycmlkZSBmaW5hbDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSAr
MjQsMTEgQEAKICNkZWZpbmUgQ2FsbEZyYW1lX2gKIAogI2luY2x1ZGUgIkFic3RyYWN0UEMuaCIK
LSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUgIlN0YWNr
VmlzaXRvci5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgog
CiBuYW1lc3BhY2UgSlNDICB7CkBAIC03NSwxMyArNzUsOSBAQCBuYW1lc3BhY2UgSlNDICB7CiAg
ICAgICAgIC8vIEJ1dCB0aGV5J3JlIHVzZWQgaW4gbWFueSBwbGFjZXMgaW4gbGVnYWN5IGNvZGUs
IHNvIHRoZXkncmUgbm90IGdvaW5nIGF3YXkgYW55IHRpbWUgc29vbi4KIAogICAgICAgICB2b2lk
IGNsZWFyRXhjZXB0aW9uKCkgeyB2bSgpLmNsZWFyRXhjZXB0aW9uKCk7IH0KLSAgICAgICAgdm9p
ZCBjbGVhclN1cHBsZW1lbnRhcnlFeGNlcHRpb25JbmZvKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgdm0oKS5jbGVhckV4Y2VwdGlvblN0YWNrKCk7Ci0gICAgICAgIH0KIAotICAgICAgICBKU1Zh
bHVlIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIHZtKCkuZXhjZXB0aW9uKCk7IH0KLSAgICAg
ICAgYm9vbCBoYWRFeGNlcHRpb24oKSBjb25zdCB7IHJldHVybiAhdm0oKS5leGNlcHRpb24oKS5p
c0VtcHR5KCk7IH0KKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKSBjb25zdCB7IHJldHVy
biB2bSgpLmV4Y2VwdGlvbigpOyB9CisgICAgICAgIGJvb2wgaGFkRXhjZXB0aW9uKCkgY29uc3Qg
eyByZXR1cm4gISF2bSgpLmV4Y2VwdGlvbigpOyB9CiAKICAgICAgICAgQXRvbWljU3RyaW5nVGFi
bGUqIGF0b21pY1N0cmluZ1RhYmxlKCkgY29uc3QgeyByZXR1cm4gdm0oKS5hdG9taWNTdHJpbmdU
YWJsZSgpOyB9CiAgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVz
KCkgY29uc3QgeyByZXR1cm4gKnZtKCkucHJvcGVydHlOYW1lczsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lv
biAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiRGVidWdn
ZXJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJFcnJvckluc3RhbmNlLmgiCiAjaW5jbHVkZSAiRXZh
bENvZGVDYWNoZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJKU0FycmF5
LmgiCkBAIC00MzUsNyArNDM2LDcgQEAgc3RhdGljIGJvb2wgdW53aW5kQ2FsbEZyYW1lKFN0YWNr
VmlzaXRvcgogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gdmlzaXRvci0+Y2FsbEZyYW1l
KCk7CiAgICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2Jh
bE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7Ci0gICAgICAgIENsZWFyRXhjZXB0aW9uU2NvcGUgc2Nv
cGUoJmNhbGxGcmFtZS0+dm0oKSk7CisgICAgICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZSBzY29w
ZSgmY2FsbEZyYW1lLT52bSgpKTsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkpKQogICAgICAgICAgICAgZGVidWdnZXItPnJldHVybkV2
ZW50KGNhbGxGcmFtZSk7CiAgICAgICAgIGVsc2UKQEAgLTU4Myw5ICs1ODQsOSBAQCBKU1N0cmlu
ZyogSW50ZXJwcmV0ZXI6OnN0YWNrVHJhY2VBc1N0cmluCiAgICAgcmV0dXJuIGpzU3RyaW5nKCZl
eGVjLT52bSgpLCBidWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCi1jbGFzcyBHZXRFeGNlcHRpb25I
YW5kbGVyRnVuY3RvciB7CitjbGFzcyBHZXRDYXRjaEhhbmRsZXJGdW5jdG9yIHsKIHB1YmxpYzoK
LSAgICBHZXRFeGNlcHRpb25IYW5kbGVyRnVuY3RvcigpCisgICAgR2V0Q2F0Y2hIYW5kbGVyRnVu
Y3RvcigpCiAgICAgICAgIDogbV9oYW5kbGVyKDApCiAgICAgewogICAgIH0KQEAgLTU5OSw3ICs2
MDAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51
ZTsKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHZpc2l0b3ItPmJ5dGVjb2Rl
T2Zmc2V0KCk7Ci0gICAgICAgIG1faGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgY29uc3QgYm9vbCBSZXF1aXJlQ2F0
Y2hIYW5kbGVyID0gdHJ1ZTsKKyAgICAgICAgbV9oYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVy
Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVDYXRjaEhhbmRsZXIpOwog
ICAgICAgICBpZiAobV9oYW5kbGVyKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6
RG9uZTsKIApAQCAtNjQ5LDExICs2NTEsMTIgQEAgcHJpdmF0ZToKICAgICBIYW5kbGVySW5mbyom
IG1faGFuZGxlcjsKIH07CiAKLU5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6
OnVud2luZChWTUVudHJ5RnJhbWUqJiB2bUVudHJ5RnJhbWUsIENhbGxGcmFtZSomIGNhbGxGcmFt
ZSwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUpCitORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIElu
dGVycHJldGVyOjp1bndpbmQoVk1FbnRyeUZyYW1lKiYgdm1FbnRyeUZyYW1lLCBDYWxsRnJhbWUq
JiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBib29sIGlzVGVybWluYXRpb24g
PSBmYWxzZTsKIAorICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGNlcHRpb24tPnZhbHVl
KCk7CiAgICAgQVNTRVJUKCFleGNlcHRpb25WYWx1ZS5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCgh
ZXhjZXB0aW9uVmFsdWUuaXNDZWxsKCkgfHwgZXhjZXB0aW9uVmFsdWUuYXNDZWxsKCkpOwogICAg
IC8vIFRoaXMgc2hvdWxkbid0IGJlIHBvc3NpYmxlIChoZW5jZSB0aGUgYXNzZXJ0aW9ucyksIGJ1
dCB3ZSdyZSBhbHJlYWR5IGluIHRoZSBzbG93ZXN0IG9mCkBAIC02NjIsMzIgKzY2NSwzNSBAQCBO
RVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1CiAgICAgICAgIGV4Y2VwdGlv
blZhbHVlID0ganNOdWxsKCk7CiAKICAgICBpZiAoZXhjZXB0aW9uVmFsdWUuaXNPYmplY3QoKSkK
LSAgICAgICAgaXNUZXJtaW5hdGlvbiA9IGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihh
c09iamVjdChleGNlcHRpb25WYWx1ZSkpOworICAgICAgICBpc1Rlcm1pbmF0aW9uID0gaXNUZXJt
aW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbik7CiAKLSAgICBBU1NFUlQoY2FsbEZy
YW1lLT52bSgpLmV4Y2VwdGlvblN0YWNrKCkuc2l6ZSgpKTsKKyAgICBBU1NFUlQoY2FsbEZyYW1l
LT52bSgpLmV4Y2VwdGlvbigpICYmIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKS0+c3RhY2so
KS5zaXplKCkpOwogCiAgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVudHJ5
R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7Ci0gICAgaWYgKGRlYnVnZ2VyICYmIGRlYnVnZ2Vy
LT5uZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcygpKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gY2xl
YXIgdGhlIGV4Y2VwdGlvbiBhbmQgdGhlIGV4Y2VwdGlvbiBzdGFjayBoZXJlIGluIG9yZGVyIHRv
IHNlZSBpZiBhIG5ldyBleGNlcHRpb24gaGFwcGVucy4KKyAgICBpZiAoZGVidWdnZXIgJiYgZGVi
dWdnZXItPm5lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKCkgJiYgIWV4Y2VwdGlvbi0+ZGlkTm90aWZ5
SW5zcGVjdG9yT2ZUaHJvdygpKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgdGhlIGV4
Y2VwdGlvbiBoZXJlIGluIG9yZGVyIHRvIHNlZSBpZiBhIG5ldyBleGNlcHRpb24gaGFwcGVucy4K
ICAgICAgICAgLy8gQWZ0ZXJ3YXJkcywgdGhlIHZhbHVlcyBhcmUgcHV0IGJhY2sgdG8gY29udGlu
dWUgcHJvY2Vzc2luZyB0aGlzIGVycm9yLgotICAgICAgICBDbGVhckV4Y2VwdGlvblNjb3BlIHNj
b3BlKCZjYWxsRnJhbWUtPnZtKCkpOworICAgICAgICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgc2Nv
cGUoJmNhbGxGcmFtZS0+dm0oKSk7CiAgICAgICAgIC8vIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQg
aWYgdGhlIGRlYnVnZ2VyIGlzIGVuYWJsZWQgdGhlbiB0aGVyZSBpcyBubyBpbmxpbmluZy4KICAg
ICAgICAgLy8gSWYgdGhhdCBhc3N1bXB0aW9uIHR1cm5zIG91dCB0byBiZSBmYWxzZSB0aGVuIHdl
J2xsIGlnbm9yZSB0aGUgaW5saW5lZCBjYWxsCiAgICAgICAgIC8vIGZyYW1lcy4KICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTc1NAogCi0gICAg
ICAgIGJvb2wgaGFzSGFuZGxlcjsKKyAgICAgICAgYm9vbCBoYXNDYXRjaEhhbmRsZXI7CiAgICAg
ICAgIGlmIChpc1Rlcm1pbmF0aW9uKQotICAgICAgICAgICAgaGFzSGFuZGxlciA9IGZhbHNlOwor
ICAgICAgICAgICAgaGFzQ2F0Y2hIYW5kbGVyID0gZmFsc2U7CiAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgR2V0RXhjZXB0aW9uSGFuZGxlckZ1bmN0b3IgZnVuY3RvcjsKKyAgICAgICAgICAg
IEdldENhdGNoSGFuZGxlckZ1bmN0b3IgZnVuY3RvcjsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+
aXRlcmF0ZShmdW5jdG9yKTsKLSAgICAgICAgICAgIGhhc0hhbmRsZXIgPSAhIWZ1bmN0b3IuaGFu
ZGxlcigpOworICAgICAgICAgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSBmdW5jdG9yLmhhbmRs
ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCghaGFuZGxlciB8fCBoYW5kbGVyLT5pc0NhdGNoSGFu
ZGxlcigpKTsKKyAgICAgICAgICAgIGhhc0NhdGNoSGFuZGxlciA9ICEhaGFuZGxlcjsKICAgICAg
ICAgfQogCi0gICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25W
YWx1ZSwgaGFzSGFuZGxlcik7CisgICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oY2FsbEZyYW1l
LCBleGNlcHRpb25WYWx1ZSwgaGFzQ2F0Y2hIYW5kbGVyKTsKICAgICAgICAgQVNTRVJUKCFjYWxs
RnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKICAgICB9CisgICAgZXhjZXB0aW9uLT5zZXREaWROb3Rp
ZnlJbnNwZWN0b3JPZlRocm93KCk7CiAKICAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhh
bmRsZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgogICAgIEhhbmRs
ZXJJbmZvKiBoYW5kbGVyID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
OTgsMjAgKzk4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGV4cHJlc3Npb25J
bmZvKGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25l
ZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbik7CiAgICAgfTsKIAotICAgIGNsYXNzIENsZWFyRXhj
ZXB0aW9uU2NvcGUgeworICAgIGNsYXNzIFN1c3BlbmRFeGNlcHRpb25TY29wZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBDbGVhckV4Y2VwdGlvblNjb3BlKFZNKiB2bSk6IG1fdm0odm0pCisgICAg
ICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZShWTSogdm0pCisgICAgICAgICAgICA6IG1fdm0odm0p
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHZtLT5nZXRFeGNlcHRpb25JbmZvKG9sZEV4Y2VwdGlv
biwgb2xkRXhjZXB0aW9uU3RhY2spOworICAgICAgICAgICAgb2xkRXhjZXB0aW9uID0gdm0tPmV4
Y2VwdGlvbigpOwogICAgICAgICAgICAgdm0tPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIH0K
LSAgICAgICAgfkNsZWFyRXhjZXB0aW9uU2NvcGUoKQorICAgICAgICB+U3VzcGVuZEV4Y2VwdGlv
blNjb3BlKCkKICAgICAgICAgewotICAgICAgICAgICAgbV92bS0+c2V0RXhjZXB0aW9uSW5mbyhv
bGRFeGNlcHRpb24sIG9sZEV4Y2VwdGlvblN0YWNrKTsKKyAgICAgICAgICAgIG1fdm0tPnNldEV4
Y2VwdGlvbihvbGRFeGNlcHRpb24pOwogICAgICAgICB9CiAgICAgcHJpdmF0ZToKLSAgICAgICAg
SlNDOjpKU1ZhbHVlIG9sZEV4Y2VwdGlvbjsKLSAgICAgICAgUmVmQ291bnRlZEFycmF5PEpTQzo6
U3RhY2tGcmFtZT4gb2xkRXhjZXB0aW9uU3RhY2s7CisgICAgICAgIEV4Y2VwdGlvbiogb2xkRXhj
ZXB0aW9uOwogICAgICAgICBWTSogbV92bTsKICAgICB9OwogICAgIApAQCAtMjE1LDcgKzIxNSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgU2FtcGxpbmdUb29sKiBzYW1w
bGVyKCkgeyByZXR1cm4gbV9zYW1wbGVyLmdldCgpOyB9CiAKLSAgICAgICAgTkVWRVJfSU5MSU5F
IEhhbmRsZXJJbmZvKiB1bndpbmQoVk1FbnRyeUZyYW1lKiYsIENhbGxGcmFtZSomLCBKU1ZhbHVl
Jik7CisgICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdW53aW5kKFZNRW50cnlGcmFt
ZSomLCBDYWxsRnJhbWUqJiwgRXhjZXB0aW9uKik7CiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lk
IGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9va0lEKTsKICAgICAgICAgSlNTdHJpbmcqIHN0YWNr
VHJhY2VBc1N0cmluZyhFeGVjU3RhdGUqLCBWZWN0b3I8U3RhY2tGcmFtZT4pOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lv
biAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw3ICsyMjMsNyBAQCBBc3NlbWJseUhlbHBlcnM6Okp1
bXAgQXNzZW1ibHlIZWxwZXJzOjplCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICByZXN1bHQgPSBi
cmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJv
LCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKICNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgcmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNl
cHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJl
dF9jYXN0PGNoYXIqPih2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZh
bHVlVGFnKSk7CisgICAgcmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25D
aGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZF
eGNlcHRpb24oKSksIFRydXN0ZWRJbW0zMigwKSk7CiAjZW5kaWYKICAgICAKICAgICBpZiAod2lk
dGggPT0gTm9ybWFsSnVtcFdpZHRoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNiArNDAs
MTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4
ZWNTdGF0ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlKQordm9pZCBnZW5lcmlj
VW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUpCiB7CiAgICAgaWYgKE9wdGlvbnM6
OmJyZWFrT25UaHJvdygpKSB7CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3
UG9pbnRlcihjYWxsRnJhbWUpLCAiIGZvciBjb2RlIGJsb2NrICIsICpjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLCAiXG4iKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAgICAgCi0gICAgUkVMRUFT
RV9BU1NFUlQoZXhjZXB0aW9uVmFsdWUpOworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gdm0t
PmV4Y2VwdGlvbigpOworICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2VwdGlvbik7CiAgICAgVk1FbnRy
eUZyYW1lKiB2bUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOwotICAgIEhhbmRsZXJJ
bmZvKiBoYW5kbGVyID0gdm0tPmludGVycHJldGVyLT51bndpbmQodm1FbnRyeUZyYW1lLCBjYWxs
RnJhbWUsIGV4Y2VwdGlvblZhbHVlKTsgLy8gVGhpcyBtYXkgdXBkYXRlIHZtRW50cnlGcmFtZSBh
bmQgY2FsbEZyYW1lLgorICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gdm0tPmludGVycHJldGVy
LT51bndpbmQodm1FbnRyeUZyYW1lLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbik7IC8vIFRoaXMgbWF5
IHVwZGF0ZSB2bUVudHJ5RnJhbWUgYW5kIGNhbGxGcmFtZS4KIAogICAgIHZvaWQqIGNhdGNoUm91
dGluZTsKICAgICBJbnN0cnVjdGlvbiogY2F0Y2hQQ0ZvckludGVycHJldGVyID0gMDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCShyZXZpc2lvbiAxODUx
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEV4ZWNTdGF0
ZTsKIGNsYXNzIFZNOwogCi12b2lkIGdlbmVyaWNVbndpbmQoVk0qLCBFeGVjU3RhdGUqLCBKU1Zh
bHVlIGV4Y2VwdGlvblZhbHVlKTsKK3ZvaWQgZ2VuZXJpY1Vud2luZChWTSosIEV4ZWNTdGF0ZSop
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJEZWJ1
Z2dlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIK
ICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCkBAIC05Nyw3ICs5OCw3
IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYKICNlbmRpZiAvLyBD
UFUoWDg2KQogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGV4Y2VwdGlvbgotICAgIEp1bXAgc2F3RXhj
ZXB0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9j
YXN0PGNoYXIqPih2bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpOyAKKyAgICBKdW1wIHNhd0V4Y2VwdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3Modm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwgVHJ1c3RlZEltbTMyKDApKTsKIAog
ICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgLy8gUmV0dXJuLgpAQCAtODI5LDEzICs4
MzAsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogCiAgICAgLy8gTm93IHN0b3JlIHRoZSBleGNlcHRpb24gcmV0dXJuZWQgYnkgb3BlcmF0aW9u
VGhyb3cuCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKLSAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7Ci0gICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoSlNWYWx1ZSgpLnBheWxvYWQoKSksIEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRp
b25PZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkp
OwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWUoKS50YWcoKSksIEFkZHJlc3MocmVn
VDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZz
ZXQoKSksIHJlZ1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwg
cmVnVDEpOworCisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDMsIFZN
OjpleGNlcHRpb25PZmZzZXQoKSkpOwogCiAgICAgdW5zaWduZWQgZXhjZXB0aW9uID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBlbWl0U3RvcmUoZXhjZXB0aW9uLCByZWdU
MSwgcmVnVDApOworICAgIGVtaXRTdG9yZShleGNlcHRpb24sIHJlZ1QxLCByZWdUMik7CisKKyAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgRXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOworICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QyLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKKworICAgIHVuc2lnbmVkIHRocm93
blZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBlbWl0U3RvcmUo
dGhyb3duVmFsdWUsIHJlZ1QxLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgIkJhc2ljQmxvY2tMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkNv
cGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNp
bmNsdWRlICJKU0FycmF5LmgiCkBAIC01MjksNiArNTMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhj
ZXB0aW9uT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0
KCkpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOworCisgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIEV4Y2VwdGlvbjo6dmFsdWVP
ZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1t
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4MjMsNyArMTgyMyw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvdyhFeGVj
U3QKICAgICB2bS0+dGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwogCiAgICAg
Ly8gUmVzdWx0cyBzdG9yZWQgb3V0LW9mLWJhbmQgaW4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhy
b3csIHZtLmNhbGxGcmFtZUZvclRocm93ICYgdm0udm1FbnRyeUZyYW1lRm9yVGhyb3cKLSAgICBn
ZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNlcHRpb25WYWx1ZSk7CisgICAgZ2VuZXJpY1Vud2lu
ZCh2bSwgZXhlYyk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25GbHVzaFdyaXRl
QmFycmllckJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKQEAgLTE4NjIsMTEg
KzE4NjIsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5pdEdsb2JhbENvCiB2b2lk
IEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihWTSogdm0sIEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQot
ICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSB2bS0+ZXhjZXB0aW9uKCk7Ci0gICAgQVNTRVJU
KGV4Y2VwdGlvblZhbHVlKTsKLSAgICAKLSAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNl
cHRpb25WYWx1ZSk7CisgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CiAgICAgQVNTRVJUKHZt
LT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKQEAgLTE4NzcsMTEgKzE4NzMsNyBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlCiAgICAgQVNTRVJUKGNhbGxl
ckZyYW1lKTsKIAogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcldpdGhSZXN0b3JlIHRyYWNlcih2
bSwgdm1FbnRyeUZyYW1lLCBjYWxsZXJGcmFtZSk7Ci0KLSAgICBKU1ZhbHVlIGV4Y2VwdGlvblZh
bHVlID0gdm0tPmV4Y2VwdGlvbigpOwotICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7Ci0gICAg
Ci0gICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbGVyRnJhbWUsIGV4Y2VwdGlvblZhbHVlKTsKKyAg
ICBnZW5lcmljVW53aW5kKHZtLCBjYWxsZXJGcmFtZSk7CiAgICAgQVNTRVJUKHZtLT50YXJnZXRN
YWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKQEAgLTE4ODksOCArMTg4MSw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WTUhhbmRsZUV4Y2UKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgIGdl
bmVyaWNVbndpbmQodm0sIGV4ZWMsIHZtLT5leGNlcHRpb24oKSk7CisgICAgZ2VuZXJpY1Vud2lu
ZCh2bSwgZXhlYyk7CiB9CiAKIC8vIFRoaXMgZnVuY3Rpb24gInNob3VsZCIganVzdCB0YWtlIHRo
ZSBFeGVjU3RhdGUqLCBidXQgZG9pbmcgc28gd291bGQgbWFrZSBpdCBtb3JlIGRpZmZpY3VsdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAko
cmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksOCArMzQ5LDggQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogI2Vsc2UKICAgICBKU0ludGVyZmFjZUpJVDo6
SnVtcCBleGNlcHRpb25IYW5kbGVyID0gaml0LmJyYW5jaDMyKAogICAgICAgICBKU0ludGVyZmFj
ZUpJVDo6Tm90RXF1YWwsCi0gICAgICAgIEpTSW50ZXJmYWNlSklUOjpBYnNvbHV0ZUFkZHJlc3Mo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksCi0gICAgICAg
IEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwor
ICAgICAgICBKU0ludGVyZmFjZUpJVDo6QWJzb2x1dGVBZGRyZXNzKHZtLT5hZGRyZXNzT2ZFeGNl
cHRpb24oKSksCisgICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoMCkpOwogI2Vu
ZGlmCiAKICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCShy
ZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZz
ZXRzRXh0cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1
ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAi
RGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXhl
Y3V0YWJsZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc1LDggKzEzNzUsNyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHJvZmlsZV9kCiBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfaGFuZGxlX2V4Y2VwdGlvbikKIHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMo
KTsKLSAgICBBU1NFUlQodm0uZXhjZXB0aW9uKCkpOwotICAgIGdlbmVyaWNVbndpbmQoJnZtLCBl
eGVjLCB2bS5leGNlcHRpb24oKSk7CisgICAgZ2VuZXJpY1Vud2luZCgmdm0sIGV4ZWMpOwogICAg
IExMSU5UX0VORF9JTVBMKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAx
ODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNjkzLDcgKzY5Myw3IEBAIG1hY3JvIGJyYW5j
aElmRXhjZXB0aW9uKGxhYmVsKQogICAgIGxvYWRwIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2Zy
XSwgdDMKICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKICAgICBsb2FkcCBNYXJrZWRCbG9j
azo6bV93ZWFrU2V0ICsgV2Vha1NldDo6bV92bVt0M10sIHQzCi0gICAgYmllcSBWTTo6bV9leGNl
cHRpb24gKyBUYWdPZmZzZXRbdDNdLCBFbXB0eVZhbHVlVGFnLCAubm9FeGNlcHRpb24KKyAgICBi
dGl6IFZNOjptX2V4Y2VwdGlvblt0M10sIC5ub0V4Y2VwdGlvbgogICAgIGptcCBsYWJlbAogLm5v
RXhjZXB0aW9uOgogZW5kCkBAIC0xOTUyLDE1ICsxOTUyLDIwIEBAIF9sbGludF9vcF9jYXRjaDoK
ICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKIAogICAgIGxvYWRpIFZNOjp0YXJn
ZXRJbnRlcnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQwotICAgIGxvYWRpIFZNOjptX2V4Y2VwdGlv
biArIFBheWxvYWRPZmZzZXRbdDNdLCB0MAotICAgIGxvYWRpIFZNOjptX2V4Y2VwdGlvbiArIFRh
Z09mZnNldFt0M10sIHQxCi0gICAgc3RvcmVpIDAsIFZNOjptX2V4Y2VwdGlvbiArIFBheWxvYWRP
ZmZzZXRbdDNdCi0gICAgc3RvcmVpIEVtcHR5VmFsdWVUYWcsIFZNOjptX2V4Y2VwdGlvbiArIFRh
Z09mZnNldFt0M10KKyAgICBsb2FkaSBWTTo6bV9leGNlcHRpb25bdDNdLCB0MAorICAgIHN0b3Jl
aSAwLCBWTTo6bV9leGNlcHRpb25bdDNdCiAgICAgbG9hZGkgNFtQQ10sIHQyCiAgICAgc3RvcmVp
IHQwLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDIsIDhdCisgICAgc3RvcmVpIENlbGxUYWcsIFRhZ09m
ZnNldFtjZnIsIHQyLCA4XQorCisgICAgbG9hZGkgRXhjZXB0aW9uOjptX3ZhbHVlICsgVGFnT2Zm
c2V0W3QwXSwgdDEKKyAgICBsb2FkaSBFeGNlcHRpb246Om1fdmFsdWUgKyBQYXlsb2FkT2Zmc2V0
W3QwXSwgdDAKKyAgICBsb2FkaSA4W1BDXSwgdDIKKyAgICBzdG9yZWkgdDAsIFBheWxvYWRPZmZz
ZXRbY2ZyLCB0MiwgOF0KICAgICBzdG9yZWkgdDEsIFRhZ09mZnNldFtjZnIsIHQyLCA4XQorCiAg
ICAgdHJhY2VFeGVjdXRpb24oKSAgIyBUaGlzIG5lZWRzIHRvIGJlIGhlcmUgYmVjYXVzZSB3ZSBk
b24ndCB3YW50IHRvIGNsb2JiZXIgdDAsIHQxLCB0MiwgdDMgYWJvdmUuCi0gICAgZGlzcGF0Y2go
MikKKyAgICBkaXNwYXRjaCgzKQogCiBfbGxpbnRfb3BfZW5kOgogICAgIHRyYWNlRXhlY3V0aW9u
KCkKQEAgLTIwMzgsNyArMjA0Myw3IEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1
dGFibGVPZmYKICAgICBlbmQKICAgICAKICAgICBmdW5jdGlvbkVwaWxvZ3VlKCkKLSAgICBiaW5l
cSBWTTo6bV9leGNlcHRpb24gKyBUYWdPZmZzZXRbdDNdLCBFbXB0eVZhbHVlVGFnLCAuaGFuZGxl
RXhjZXB0aW9uCisgICAgYnRpbnogVk06Om1fZXhjZXB0aW9uW3QzXSwgLmhhbmRsZUV4Y2VwdGlv
bgogICAgIHJldAogCiAuaGFuZGxlRXhjZXB0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9u
IDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xODIwLDEyICsxODIwLDE4IEBAIF9sbGludF9v
cF9jYXRjaDoKICAgICBsb2FkcCBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93W3QzXSwg
UEMKICAgICBzdWJwIFBCLCBQQwogICAgIHJzaGlmdHAgMywgUEMKKwogICAgIGxvYWRxIFZNOjpt
X2V4Y2VwdGlvblt0M10sIHQwCiAgICAgc3RvcmVxIDAsIFZNOjptX2V4Y2VwdGlvblt0M10KICAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDIpCiAgICAgc3RvcmVxIHQwLCBbY2ZyLCB0Miwg
OF0KKworICAgIGxvYWRxIEV4Y2VwdGlvbjo6bV92YWx1ZVt0MF0sIHQzCisgICAgbG9hZGlzRnJv
bUluc3RydWN0aW9uKDIsIHQyKQorICAgIHN0b3JlcSB0MywgW2NmciwgdDIsIDhdCisKICAgICB0
cmFjZUV4ZWN1dGlvbigpCi0gICAgZGlzcGF0Y2goMikKKyAgICBkaXNwYXRjaCgzKQogCiAKIF9s
bGludF9vcF9lbmQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25z
dHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxMSwxMCAr
ODExLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgVHJ5
Tm9kZTo6VHJ5Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBTdGF0ZW1lbnRO
b2RlKiB0cnlCbG9jaywgY29uc3QgSWRlbnRpZmllciYgZXhjZXB0aW9uSWRlbnQsIFN0YXRlbWVu
dE5vZGUqIGNhdGNoQmxvY2ssIFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jaykKKyAgICBpbmxp
bmUgVHJ5Tm9kZTo6VHJ5Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBTdGF0
ZW1lbnROb2RlKiB0cnlCbG9jaywgY29uc3QgSWRlbnRpZmllciYgdGhyb3duVmFsdWVJZGVudCwg
U3RhdGVtZW50Tm9kZSogY2F0Y2hCbG9jaywgU3RhdGVtZW50Tm9kZSogZmluYWxseUJsb2NrKQog
ICAgICAgICA6IFN0YXRlbWVudE5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV90cnlCbG9jayh0
cnlCbG9jaykKLSAgICAgICAgLCBtX2V4Y2VwdGlvbklkZW50KGV4Y2VwdGlvbklkZW50KQorICAg
ICAgICAsIG1fdGhyb3duVmFsdWVJZGVudCh0aHJvd25WYWx1ZUlkZW50KQogICAgICAgICAsIG1f
Y2F0Y2hCbG9jayhjYXRjaEJsb2NrKQogICAgICAgICAsIG1fZmluYWxseUJsb2NrKGZpbmFsbHlC
bG9jaykKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZp
c2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE1MTEsNyArMTUxMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKSBvdmVycmlkZTsKIAogICAgICAgICBTdGF0ZW1lbnROb2RlKiBtX3RyeUJsb2NrOwot
ICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBtX2V4Y2VwdGlvbklkZW50OworICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBtX3Rocm93blZhbHVlSWRlbnQ7CiAgICAgICAgIFN0YXRlbWVudE5vZGUq
IG1fY2F0Y2hCbG9jazsKICAgICAgICAgU3RhdGVtZW50Tm9kZSogbV9maW5hbGx5QmxvY2s7CiAg
ICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAJ
KHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkNhbGxEYXRhLmgiCiAKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0Z1bmN0aW9uLmgiCkBAIC0zOSwxNSArNDAsMTUgQEAgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBmdQogICAgIHJldHVybiBleGVjLT5pbnRlcnByZXRlcigpLT5leGVj
dXRlQ2FsbChleGVjLCBhc09iamVjdChmdW5jdGlvbk9iamVjdCksIGNhbGxUeXBlLCBjYWxsRGF0
YSwgdGhpc1ZhbHVlLCBhcmdzKTsKIH0KIAotSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRh
JiBjYWxsRGF0YSwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIEpTVmFs
dWUqIGV4Y2VwdGlvbikKK0pTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVu
Y3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBFeGNlcHRpb24qJiByZXR1
cm5lZEV4Y2VwdGlvbikKIHsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rp
b25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAg
ICAgICpleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuZWRFeGNl
cHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQorICAgIH0gZWxzZQorICAg
ICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IG51bGxwdHI7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FsbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWxsRGF0YS5oCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWxsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQXJnTGlzdDsKK2NsYXNzIEV4Y2VwdGlvbjsKIGNs
YXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKIGNsYXNzIEpTT2JqZWN0
OwpAQCAtNTgsNyArNTksNyBAQCB1bmlvbiBDYWxsRGF0YSB7CiB9OwogCiBKU19FWFBPUlRfUFJJ
VkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2Fs
bFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KTsKLUpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqLCBKU1ZhbHVlIGZ1
bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUqIGV4Y2VwdGlvbik7CitKU19FWFBPUlRfUFJJVkFU
RSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5
cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmLCBF
eGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJDYWxsRnJh
bWUuaCIKICNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCkBAIC02MCwxOSArNjEs
MTggQEAgYm9vbCBjaGVja1N5bnRheChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZAogICAgICAgICBK
U1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdCwgSlNQYXJzZXJDb2RlVHlwZTo6UHJvZ3JhbSwg
ZXJyb3IpOwogfQogCi1KU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSogcmV0dXJuZWRFeGNl
cHRpb24pCitKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgRXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRp
b24pCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
ZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNT
dHJpbmdUYWJsZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+dm0oKS5pc0NvbGxlY3Rv
ckJ1c3koKSk7CisgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBudWxscHRyOwogCiAgICAgQ29kZVBy
b2ZpbGluZyBwcm9maWxlKHNvdXJjZSk7CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3Jh
bSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsKICAgICBpZiAoIXBy
b2dyYW0pIHsKLSAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAgICAgICAgKnJl
dHVybmVkRXhjZXB0aW9uID0gZXhlYy0+dm0oKS5leGNlcHRpb24oKTsKLQorICAgICAgICByZXR1
cm5lZEV4Y2VwdGlvbiA9IGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCk7CiAgICAgICAgIGV4ZWMtPnZt
KCkuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQpAQCAtODMsOSArODMsNyBAQCBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKHBy
b2dyYW0sIGV4ZWMsIHRoaXNPYmopOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikKLSAgICAgICAgICAgICpyZXR1cm5lZEV4
Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotCisgICAgICAgIHJldHVybmVkRXhjZXB0aW9u
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsOCBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7
Ci0gICAgCisKK2NsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTU2Nv
cGU7CiBjbGFzcyBQYXJzZXJFcnJvcjsKQEAgLTM1LDcgKzM2LDEyIEBAIGNsYXNzIFZNOwogCiBK
U19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNrU3ludGF4KFZNJiwgY29uc3QgU291cmNlQ29kZSYs
IFBhcnNlckVycm9yJik7CiBKU19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNrU3ludGF4KEV4ZWNT
dGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKLUpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29k
ZSYsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZSgpLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAw
KTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgY29uc3Qg
U291cmNlQ29kZSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2Vw
dGlvbik7CitpbmxpbmUgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZUNvZGUsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZSgpKQorewor
ICAgIEV4Y2VwdGlvbiogdW51c2VkOworICAgIHJldHVybiBldmFsdWF0ZShleGVjLCBzb3VyY2VD
b2RlLCB0aGlzVmFsdWUsIHVudXNlZCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgJKHJldmlzaW9uIDE4NTExMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc2LDYgKzc2LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93VHlwZUVycgog
SlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93U3ludGF4RXJyb3IoRXhlY1N0YXRlKik7
CiAKIC8vIENvbnZlbmllbmNlIHdyYXBwZXJzLCB3cmFwIHJlc3VsdCBhcyBhbiBFbmNvZGVkSlNW
YWx1ZS4KK2lubGluZSB2b2lkIHRocm93Vk1FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlv
biogZXhjZXB0aW9uKSB7IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
KTsgfQogaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1FcnJvcihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgZXJyb3IpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93
RXhjZXB0aW9uKGV4ZWMsIGVycm9yKSk7IH0KIGlubGluZSBFbmNvZGVkSlNWYWx1ZSB0aHJvd1ZN
VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
VHlwZUVycm9yKGV4ZWMpKTsgfQogaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1UeXBlRXJy
b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgeyByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSkpOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
b25zdCBDbGFzc0luZm8gRXhjZXB0aW9uOjpzX2luZm8gPSB7ICJFeGNlcHRpb24iLCAmQmFzZTo6
c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEV4Y2VwdGlvbikgfTsKKworRXhjZXB0aW9u
KiBFeGNlcHRpb246OmNyZWF0ZShWTSYgdm0sIEpTVmFsdWUgdGhyb3duVmFsdWUpCit7CisgICAg
RXhjZXB0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFeGNlcHRpb24+
KHZtLmhlYXApKSBFeGNlcHRpb24odm0sIHRocm93blZhbHVlKTsKKyAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEV4Y2VwdGlvbjo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzdGF0
aWNfY2FzdDxFeGNlcHRpb24qPihjZWxsKTsKKyAgICBleGNlcHRpb24tPkV4Y2VwdGlvbjo6fkV4
Y2VwdGlvbigpOworfQorCitTdHJ1Y3R1cmUqIEV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7
CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2
b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIEV4Y2VwdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxFeGNlcHRpb24q
PihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAg
IGlmICghdGhpc09iamVjdC0+bV92YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdGhp
c09iamVjdC0+bV92YWx1ZS5nZXQoKS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3ZhbHVlKTsKK30KKworRXhjZXB0aW9uOjpFeGNl
cHRpb24oVk0mIHZtLCBKU1ZhbHVlIHRocm93blZhbHVlKQorICAgIDogQmFzZSh2bSwgdm0uZXhj
ZXB0aW9uU3RydWN0dXJlLmdldCgpKQoreworICAgIG1fdmFsdWUuc2V0KHZtLCB0aGlzLCB0aHJv
d25WYWx1ZSk7CisKKyAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKKyAgICB2bS5p
bnRlcnByZXRlci0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlKTsKKyAgICBtX3N0YWNrID0gUmVm
Q291bnRlZEFycmF5PFN0YWNrRnJhbWU+KHN0YWNrVHJhY2UpOworfQorCitFeGNlcHRpb246On5F
eGNlcHRpb24oKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRXhjZXB0aW9uX2gKKyNkZWZpbmUgRXhjZXB0aW9uX2gKKworI2luY2x1ZGUgIkludGVy
cHJldGVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKyAgICAKK2NsYXNzIEV4Y2VwdGlvbiA6IHB1YmxpYyBKU09iamVjdCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU09iamVjdCBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFn
czsKKworICAgIHN0YXRpYyBFeGNlcHRpb24qIGNyZWF0ZShWTSYsIEpTVmFsdWUgdGhyb3duVmFs
dWUpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Cisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIHN0YXRpYyBwdHJkaWZmX3QgdmFs
dWVPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGNlcHRp
b24sIG1fdmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBFeGNlcHRpb24qIGNhc3QoSlNWYWx1
ZSBleGNlcHRpb25Bc0pTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNDYXN0PEV4Y2Vw
dGlvbio+KGV4Y2VwdGlvbkFzSlNWYWx1ZS5hc0NlbGwoKSk7CisgICAgfQorCisgICAgSlNWYWx1
ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KKyAgICBjb25zdCBSZWZD
b3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIHN0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjazsg
fQorCisgICAgYm9vbCBkaWROb3RpZnlJbnNwZWN0b3JPZlRocm93KCkgY29uc3QgeyByZXR1cm4g
bV9kaWROb3RpZnlJbnNwZWN0b3JPZlRocm93OyB9CisgICAgdm9pZCBzZXREaWROb3RpZnlJbnNw
ZWN0b3JPZlRocm93KCkgeyBtX2RpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3cgPSB0cnVlOyB9CisK
KyAgICB+RXhjZXB0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgRXhjZXB0aW9uKFZNJiwgSlNWYWx1
ZSB0aHJvd25WYWx1ZSk7CisKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKKyAg
ICBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4gbV9zdGFjazsKKyAgICBib29sIG1fZGlkTm90
aWZ5SW5zcGVjdG9yT2ZUaHJvdyB7IGZhbHNlIH07CisKKyAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
eGNlcHRpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uSGVscGVycy5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1l
LmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU05v
dEFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTU5LDE3ICs2MCwxMSBA
QCBKU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwCiAgICAgcmV0dXJuIFRl
cm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKCp2bSk7CiB9CiAKLWJvb2wgaXNUZXJtaW5h
dGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTT2JqZWN0KiBvYmplY3QpCitib29sIGlzVGVybWluYXRl
ZEV4ZWN1dGlvbkV4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2VwdGlvbikKIHsKLSAgICByZXR1cm4g
b2JqZWN0LT5pbmhlcml0cyhUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmluZm8oKSk7CisgICAg
cmV0dXJuIGV4Y2VwdGlvbi0+dmFsdWUoKS5pbmhlcml0cyhUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3I6OmluZm8oKSk7CiB9CiAKLWJvb2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKFRlcm1pbmF0ZWRFeGVj
dXRpb25FcnJvcjo6aW5mbygpKTsKLX0KLQotCiBKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxv
d0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIk1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkLiIpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbkhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIHR5cGVkZWYgSlNPYmplY3QqICgqRXJyb3JGYWN0b3J5KShFeGVjU3RhdGUq
LCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CiAKIEpTT2Jq
ZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKFZNKik7Ci1ib29sIGlzVGVy
bWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU09iamVjdCopOwotSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNWYWx1ZSk7CitKU19FWFBPUlRf
UFJJVkFURSBib29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihFeGNlcHRpb24qKTsK
IEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqLCBKU1Zh
bHVlLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CiBKU19F
WFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0
ZSopOwogSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2
ICsyNCw3IEBACiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAKICNpbmNsdWRlICJFcnJvci5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC03NSw3ICs3
Niw3IEBAIEpTVmFsdWUgY2FsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAvLyBG
SVhNRTogU29tZSBjYWxsZXJzIG1heSBpbnZva2UgZ2V0KCkgd2l0aG91dCBjaGVja2luZyBmb3Ig
YW4gZXhjZXB0aW9uIGZpcnN0LgogICAgIC8vIFdlIHdvcmsgYXJvdW5kIHRoYXQgYnkgY2hlY2tp
bmcgaGVyZS4KICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBl
eGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1
ZSgpOwogCiAgICAgSlNPYmplY3QqIGdldHRlciA9IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihnZXR0
ZXJTZXR0ZXIpLT5nZXR0ZXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODUxMTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIEpTVmFsdWUgaXRlcmF0b3JTdGVwKEV4ZWNT
dGF0ZSogZXhlYywgSlMKIAogdm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBpdGVyYXRvcikKIHsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24q
IGV4Y2VwdGlvbiA9IG51bGxwdHI7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAg
ICAgICAgIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwpAQCAtOTksNyArOTksNyBAQCB2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChyZXR1cm5GdW5jdGlv
bi5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkKKyAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNyw3ICsx
MDcsNyBAQCB2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgQ2Fs
bERhdGEgcmV0dXJuRnVuY3Rpb25DYWxsRGF0YTsKICAgICBDYWxsVHlwZSByZXR1cm5GdW5jdGlv
bkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmV0dXJuRnVuY3Rpb24sIHJldHVybkZ1bmN0aW9uQ2Fs
bERhdGEpOwogICAgIGlmIChyZXR1cm5GdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkg
ewotICAgICAgICBpZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIGlmIChleGNlcHRp
b24pCiAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwpAQCAt
MTE3LDcgKzExNyw3IEBAIHZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXR1cm5GdW5jdGlvbkFyZ3VtZW50czsKICAgICBK
U1ZhbHVlIGlubmVyUmVzdWx0ID0gY2FsbChleGVjLCByZXR1cm5GdW5jdGlvbiwgcmV0dXJuRnVu
Y3Rpb25DYWxsVHlwZSwgcmV0dXJuRnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0b3IsIHJldHVybkZ1
bmN0aW9uQXJndW1lbnRzKTsKIAotICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkgeworICAg
IGlmIChleGNlcHRpb24pIHsKICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBleGNlcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVk
ZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiR2V0
dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgiCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKICNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgogI2luY2x1
ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgpAQCAt
MTM2LDcgKzEzNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMK
IAogICAgIC8vIDE0LiBJZiByZXN1bHQgaXMgYW4gYWJydXB0IGNvbXBsZXRpb24sIGNhbGwgUHJv
bWlzZVJlamVjdChwcm9taXNlLCByZXN1bHQuW1t2YWx1ZV1dKS4KICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRp
b24oKTsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKS0+dmFs
dWUoKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAgICAgICBwcm9taXNl
LT5yZWplY3Qodm0sIGV4Y2VwdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3BwCShyZXZpc2lvbiAxODUxMTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKICNp
bmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
UHJvbWlzZS5oIgpAQCAtMTUwLDcgKzE1MSw3IEBAIFRoZW5hYmxlU3RhdHVzIHVwZGF0ZURlZmVy
cmVkRnJvbVBvdGVudGkKICAgICAgICAgLy8gaS4gTGV0ICdyZWplY3RSZXN1bHQnIGJlIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kIG9mCiAgICAgICAg
IC8vICAgIGRlZmVycmVkLltbUmVqZWN0XV0gd2l0aCB1bmRlZmluZWQgYXMgdGhpc0FyZ3VtZW50
IGFuZCBhIExpc3QgY29udGFpbmluZwogICAgICAgICAvLyAgICB0aGVuLltbdmFsdWVdXSBhcyBh
cmd1bWVudHNMaXN0LgotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlv
bigpOworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1
ZSgpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgICAgIHBlcmZvcm1E
ZWZlcnJlZFJlamVjdChleGVjLCBkZWZlcnJlZCwgZXhjZXB0aW9uKTsKQEAgLTE4NSw3ICsxODYs
NyBAQCBUaGVuYWJsZVN0YXR1cyB1cGRhdGVEZWZlcnJlZEZyb21Qb3RlbnRpCiAgICAgICAgIC8v
IGkuIExldCAncmVqZWN0UmVzdWx0JyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ2Fs
bF1dIGludGVybmFsIG1ldGhvZCBvZgogICAgICAgICAvLyAgICBkZWZlcnJlZC5bW1JlamVjdF1d
IHdpdGggdW5kZWZpbmVkIGFzIHRoaXNBcmd1bWVudCBhbmQgYSBMaXN0IGNvbnRhaW5pbmcKICAg
ICAgICAgLy8gICAgdGhlbkNhbGxSZXN1bHQuW1t2YWx1ZV1dIGFzIGFyZ3VtZW50c0xpc3QuCi0g
ICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIEpT
VmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7CiAgICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgcGVyZm9ybURlZmVycmVkUmVqZWN0KGV4
ZWMsIGRlZmVycmVkLCBleGNlcHRpb24pOwpAQCAtMjI4LDcgKzIyOSw3IEBAIHZvaWQgcGVyZm9y
bURlZmVycmVkUmVqZWN0KEV4ZWNTdGF0ZSogZXgKIEpTVmFsdWUgYWJydXB0UmVqZWN0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkKQogewogICAgIEFTU0VS
VChleGVjLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgSlNWYWx1ZSBhcmd1bWVudCA9IGV4ZWMtPmV4
Y2VwdGlvbigpOworICAgIEpTVmFsdWUgYXJndW1lbnQgPSBleGVjLT5leGNlcHRpb24oKS0+dmFs
dWUoKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgLy8gaS4gTGV0ICdyZWpl
Y3RSZXN1bHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwg
bWV0aG9kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VSZWFj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9taXNlUmVhY3Rpb24uY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb21pc2VSZWFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKICNpbmNsdWRlICJFcnJvci5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCkBA
IC04OCw3ICs4OSw3IEBAIHZvaWQgRXhlY3V0ZVByb21pc2VSZWFjdGlvbk1pY3JvdGFzazo6cnUK
ICAgICAvLyAgICBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YgZGVmZXJyZWQuW1tSZWplY3Rd
XSBwYXNzaW5nIHVuZGVmaW5lZCBhcyB0aGlzQXJndW1lbnQKICAgICAvLyAgICBhbmQgYSBMaXN0
IGNvbnRhaW5pbmcgaGFuZGxlclJlc3VsdC5bW3ZhbHVlXV0gYXMgYXJndW1lbnRzTGlzdC4KICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24g
PSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5l
eGNlcHRpb24oKS0+dmFsdWUoKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKIAog
ICAgICAgICBwZXJmb3JtRGVmZXJyZWRSZWplY3QoZXhlYywgZGVmZXJyZWQsIGV4Y2VwdGlvbik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxODUxMTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRp
c2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkVycm9ySW5zdGFuY2UuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb24uaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCkBAIC0yMzUsNiArMjM2
LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIHdlYWtN
YXBEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgV2Vha01hcERhdGE6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFZhbHVlU3RydWN0dXJlLnNldCgqdGhp
cywgSW5mZXJyZWRWYWx1ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwog
ICAgIGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlvblJhcmVEYXRh
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgZXhjZXB0aW9uU3Ry
dWN0dXJlLnNldCgqdGhpcywgRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAjaWYgRU5BQkxFKFBST01JU0VTKQogICAgIHByb21pc2VEZWZlcnJlZFN0cnVj
dHVyZS5zZXQoKnRoaXMsIEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvbWlzZVJlYWN0aW9uU3RydWN0dXJlLnNldCgqdGhpcywg
SlNQcm9taXNlUmVhY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
QEAgLTU0NSw3ICs1NDcsNyBAQCB2b2lkIFZNOjpyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpCiAg
ICAgaGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQogCi1KU1ZhbHVlIFZNOjp0aHJvd0V4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXJyb3IpCit2b2lkIFZNOjp0aHJvd0V4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewogICAgIGlmIChP
cHRpb25zOjpicmVha09uVGhyb3coKSkgewogICAgICAgICBkYXRhTG9nKCJJbiBjYWxsIGZyYW1l
ICIsIFJhd1BvaW50ZXIoZXhlYyksICIgZm9yIGNvZGUgYmxvY2sgIiwgKmV4ZWMtPmNvZGVCbG9j
aygpLCAiXG4iKTsKQEAgLTU1MywzNyArNTU1LDI0IEBAIEpTVmFsdWUgVk06OnRocm93RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXgKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGV4ZWMgPT0gdG9wQ2Fs
bEZyYW1lIHx8IGV4ZWMgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCkgfHwgZXhlYyA9PSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7
Ci0gICAgCi0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Ci0gICAgaW50ZXJwcmV0
ZXItPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7Ci0gICAgbV9leGNlcHRpb25TdGFjayA9IFJl
ZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPihzdGFja1RyYWNlKTsKLSAgICBtX2V4Y2VwdGlvbiA9
IGVycm9yOwotCi0gICAgcmV0dXJuIGVycm9yOwotfQotICAgIAotSlNPYmplY3QqIFZNOjp0aHJv
d0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBlcnJvcikKLXsKLSAgICByZXR1
cm4gYXNPYmplY3QodGhyb3dFeGNlcHRpb24oZXhlYywgSlNWYWx1ZShlcnJvcikpKTsKLX0KLXZv
aWQgVk06OmdldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJy
YXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKQotewotICAgIGV4Y2VwdGlvbiA9IG1fZXhj
ZXB0aW9uOwotICAgIGV4Y2VwdGlvblN0YWNrID0gbV9leGNlcHRpb25TdGFjazsKLX0KLXZvaWQg
Vk06OnNldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJyYXk8
U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKQotewotICAgIG1fZXhjZXB0aW9uID0gZXhjZXB0
aW9uOwotICAgIG1fZXhjZXB0aW9uU3RhY2sgPSBleGNlcHRpb25TdGFjazsKKyAgICBzZXRFeGNl
cHRpb24oZXhjZXB0aW9uKTsKIH0KIAotdm9pZCBWTTo6Y2xlYXJFeGNlcHRpb24oKQorSlNWYWx1
ZSBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRocm93blZhbHVl
KQogewotICAgIG1fZXhjZXB0aW9uID0gSlNWYWx1ZSgpOworICAgIEV4Y2VwdGlvbiogZXhjZXB0
aW9uOworICAgIGlmICh0aHJvd25WYWx1ZS5pc0NlbGwoKSAmJiB0aHJvd25WYWx1ZS5hc0NlbGwo
KS0+c3RydWN0dXJlKCkgPT0gZXhjZXB0aW9uU3RydWN0dXJlLmdldCgpKQorICAgICAgICBleGNl
cHRpb24gPSBqc0Nhc3Q8RXhjZXB0aW9uKj4odGhyb3duVmFsdWUuYXNDZWxsKCkpOworICAgIGVs
c2UKKyAgICAgICAgZXhjZXB0aW9uID0gRXhjZXB0aW9uOjpjcmVhdGUoKnRoaXMsIHRocm93blZh
bHVlKTsKKworICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgcmV0dXJu
IEpTVmFsdWUoZXhjZXB0aW9uKTsKIH0KLXZvaWQgVk06OiBjbGVhckV4Y2VwdGlvblN0YWNrKCkK
KworSlNPYmplY3QqIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBlcnJvcikKIHsKLSAgICBtX2V4Y2VwdGlvblN0YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNr
RnJhbWU+KCk7CisgICAgcmV0dXJuIGFzT2JqZWN0KHRocm93RXhjZXB0aW9uKGV4ZWMsIEpTVmFs
dWUoZXJyb3IpKSk7CiB9CiAKIHZvaWQgVk06OnNldFN0YWNrUG9pbnRlckF0Vk1FbnRyeSh2b2lk
KiBzcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsNyArNTgsNiBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KICNpbmNsdWRlIDx3
dGYvU3RhY2tCb3VuZHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4K
QEAgLTc4LDYgKzc3LDcgQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29kZUNhY2hlOwogY2xh
c3MgQ29tbW9uSWRlbnRpZmllcnM7CiBjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBFeGNlcHRpb247
CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIFR5cGVQcm9maWxlcjsKIGNsYXNzIFR5cGVQcm9m
aWxlckxvZzsKQEAgLTI3NCw2ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRW
YWx1ZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvblJhcmVEYXRhU3Ry
dWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV4Y2VwdGlvblN0cnVjdHVyZTsKICNpZiBF
TkFCTEUoUFJPTUlTRVMpCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZURlZmVycmVkU3Ry
dWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VSZWFjdGlvblN0cnVjdHVyZTsK
QEAgLTM3MiwxNCArMzczLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihWTSwgdGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwogICAgIH0KIAotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgY2xlYXJFeGNlcHRpb24oKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGNsZWFyRXhjZXB0aW9uU3RhY2soKTsKLSAgICB2b2lkIGdldEV4Y2VwdGlvbkluZm8oSlNW
YWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0
YWNrKTsKLSAgICB2b2lkIHNldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZD
b3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKTsKLSAgICBKU1ZhbHVlIGV4
Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9Ci0gICAgSlNWYWx1ZSogYWRk
cmVzc09mRXhjZXB0aW9uKCkgeyByZXR1cm4gJm1fZXhjZXB0aW9uOyB9Ci0gICAgY29uc3QgUmVm
Q291bnRlZEFycmF5PFN0YWNrRnJhbWU+JiBleGNlcHRpb25TdGFjaygpIGNvbnN0IHsgcmV0dXJu
IG1fZXhjZXB0aW9uU3RhY2s7IH0KKyAgICB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyBtX2V4Y2Vw
dGlvbiA9IG51bGxwdHI7IH0KKyAgICB2b2lkIHNldEV4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2Vw
dGlvbikgeyBtX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsgfQogCisgICAgRXhjZXB0aW9uKiBleGNl
cHRpb24oKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbjsgfQorICAgIEpTQ2VsbCoqIGFkZHJl
c3NPZkV4Y2VwdGlvbigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKio+KCZtX2V4
Y2VwdGlvbik7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhyb3dFeGNlcHRpb24o
RXhlY1N0YXRlKiwgRXhjZXB0aW9uKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0
aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU09iamVjdCogdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIApAQCAt
NTY5LDEyICs1NjksMTEgQEAgcHJpdmF0ZToKICNlbmRpZgogI2VuZGlmCiAgICAgdm9pZCogbV9s
YXN0U3RhY2tUb3A7Ci0gICAgSlNWYWx1ZSBtX2V4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIG1f
ZXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9pbkRlZmluZU93blByb3BlcnR5Owog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDb2RlQ2FjaGU+IG1fY29kZUNhY2hlOwogICAgIExlZ2FjeVBy
b2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4
ZWN1dGFibGVzPiBtX2J1aWx0aW5FeGVjdXRhYmxlczsKLSAgICBSZWZDb3VudGVkQXJyYXk8U3Rh
Y2tGcmFtZT4gbV9leGNlcHRpb25TdGFjazsKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFdh
dGNocG9pbnRTZXQ+PiBtX2ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludFNldHM7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFR5cGVQcm9maWxlcj4gbV90eXBlUHJvZmlsZXI7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFR5cGVQcm9maWxlckxvZz4gbV90eXBlUHJvZmlsZXJMb2c7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHJldmlzaW9uIDE4NTEx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDYgQEAgVk1FbnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUo
Vk0mIHZtLCBKU0dsbwogICAgICAgICAvLyBvYnNlcnZlIHRpbWUgeG9uZSBjaGFuZ2VzLgogICAg
ICAgICB2bS5yZXNldERhdGVDYWNoZSgpOwogICAgIH0KLQotICAgIC8vIENsZWFyIHRoZSBjYXB0
dXJlZCBleGNlcHRpb24gc3RhY2sgYmV0d2VlbiBlbnRyaWVzCi0gICAgdm0uY2xlYXJFeGNlcHRp
b25TdGFjaygpOwogfQogCiB2b2lkIFZNRW50cnlTY29wZTo6c2V0RW50cnlTY29wZURpZFBvcExp
c3RlbmVyKHZvaWQqIGtleSwgRW50cnlTY29wZURpZFBvcExpc3RlbmVyIGxpc3RlbmVyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9FeGNlcHRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0V4
Y2VwdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9FeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNp
Zm5kZWYgV2ViQ29yZV9GV0RfRXhjZXB0aW9uX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfRXhjZXB0
aW9uX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9FeGNlcHRpb24uaD4KKyNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0Rh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMCArNzMsMTAgQEAgSlNWYWx1ZSBKU0NhbGxi
YWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSgogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9u
Q2FsbChjb250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRp
b247CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjb250
ZXh0LT5pc0RvY3VtZW50KCkKLSAgICAgICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwo
ZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCAmZXhj
ZXB0aW9uKQotICAgICAgICA6IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsICZleGNlcHRpb24pOworICAgICAgICA/IEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0
aGlzVmFsdWUsIGFyZ3MsIGV4Y2VwdGlvbikKKyAgICAgICAgOiBKU0M6OmNhbGwoZXhlYywgZnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pOwog
CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCBj
b250ZXh0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0
aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Myw4ICs5Myw4IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6
bG9va3VwTmEKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5k
KGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHByZWZpeCkpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRp
b247Ci0gICAgSlNWYWx1ZSByZXR2YWwgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhl
YywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV9jdXN0b21SZXNvbHZlci5nZXQoKSwg
YXJncywgJmV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CisgICAgSlNWYWx1
ZSByZXR2YWwgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwgbV9jdXN0b21SZXNvbHZlci5nZXQoKSwgYXJncywgZXhjZXB0aW9u
KTsKIAogICAgIFN0cmluZyByZXN1bHQ7CiAgICAgaWYgKGV4Y2VwdGlvbikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMTg1MTEw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNl
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JI
YW5kbGluZ1Njb3BlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KICNpbmNsdWRl
IDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rp
b24uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTEzOCw3ICsxMzksNyBAQCBKU0M6OkpTVmFs
dWUganNBcnJheShKU0M6OkV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0
QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0LCBsaXN0KTsKIH0KIAotdm9pZCByZXBvcnRFeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBj
YWNoZWRTY3JpcHQpCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2Vw
dGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChleGVjLT52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwog
ICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSkKQEAgLTE0
OCw3ICsxNDksNiBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAK
ICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0
YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4Q2Fs
bFN0YWNrU2l6ZVRvQ2FwdHVyZSkpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAg
ZXhlYy0+Y2xlYXJTdXBwbGVtZW50YXJ5RXhjZXB0aW9uSW5mbygpOwogCiAgICAgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSBq
c0R5bmFtaWNDYXN0PEpTRE9NV2luZG93Kj4oZ2xvYmFsT2JqZWN0KSkgewpAQCAtMTY2LDE0ICsx
NjYsMTMgQEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIH0K
IAogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKEV4Y2VwdGlvbkJhc2UqIGV4Y2Vw
dGlvbkJhc2UgPSB0b0V4Y2VwdGlvbkJhc2UoZXhjZXB0aW9uKSkKKyAgICBpZiAoRXhjZXB0aW9u
QmFzZSogZXhjZXB0aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFzZShleGNlcHRpb24tPnZhbHVlKCkp
KQogICAgICAgICBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb25CYXNlLT5tZXNzYWdlKCkgKyAiOiAi
ICArIGV4Y2VwdGlvbkJhc2UtPmRlc2NyaXB0aW9uKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8v
IEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNwZWN0b3I6IFdlYkNv
cmU6OnJlcG9ydEV4Y2VwdGlvbiBzaG91bGQgbm90IGV2YWx1YXRlIEphdmFTY3JpcHQgaGFuZGxp
bmcgZXhjZXB0aW9ucwogICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY3VzdG9uIGV4Y2VwdGlvbiBv
YmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5IGFuZCBnZXQgYSBuaWNlIHN0cmluZyBy
ZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4KLSAgICAgICAgZXJyb3JNZXNzYWdlID0g
ZXhjZXB0aW9uLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgZXJyb3JNZXNz
YWdlID0gZXhjZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJTdXBwbGVt
ZW50YXJ5RXhjZXB0aW9uSW5mbygpOwogICAgIH0KIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKQEAgLTE4Miw3ICsxODEsNyBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTCiAKIHZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAg
ICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNp
b24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0Nyw3ICsyNDcsNyBAQCB2b2lkIGFkZEltcHVyZVByb3BlcnR5
KGNvbnN0IEF0b21pY1N0cmluCiAKIGNvbnN0IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVG
b3JHbG9iYWxEYXRhKEpTQzo6Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUp
OwogCi1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogPSBudWxscHRyKTsKK1dFQkNP
UkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNl
cHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7CiB2b2lkIHJlcG9ydEN1cnJlbnRFeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKIAogSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OCwxMCArOTgsMTAgQEAgdm9pZCBKU0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQo
U2NyaXB0RQogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIFZN
RW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCB2bS5lbnRyeVNjb3BlID8gdm0uZW50cnlTY29wZS0+
Z2xvYmFsT2JqZWN0KCkgOiBnbG9iYWxPYmplY3QpOwogCi0gICAgICAgIEpTVmFsdWUgZXhjZXB0
aW9uOworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICAgICAgSlNWYWx1ZSByZXR1
cm5WYWx1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKQotICAgICAgICAg
ICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywganNGdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ3MsICZleGNlcHRpb24pCi0gICAgICAgICAg
ICA6IEpTQzo6Y2FsbChleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2Jh
bE9iamVjdCwgYXJncywgJmV4Y2VwdGlvbik7CisgICAgICAgICAgICA/IEpTTWFpblRocmVhZEV4
ZWNTdGF0ZTo6Y2FsbChleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2Jh
bE9iamVjdCwgYXJncywgZXhjZXB0aW9uKQorICAgICAgICAgICAgOiBKU0M6OmNhbGwoZXhlYywg
anNGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ3MsIGV4Y2Vw
dGlvbik7CiAKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRDdXJyZW50RXZlbnQoc2F2ZWRFdmVu
dCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDEwICsxMjQsMTAgQEAg
dm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpp
bnN0cnVtZW50RnVuY3Rpb25DYWxsKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNhbGxUeXBlLCBj
YWxsRGF0YSk7CiAKICAgICAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBoYW5kbGVFdmVudEZ1bmN0
aW9uID09IGpzRnVuY3Rpb24gPyB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgZXZlbnQtPmN1cnJl
bnRUYXJnZXQoKSkgOiBqc0Z1bmN0aW9uOwotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAg
ICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgICAgIEpTVmFsdWUgcmV0dmFsID0gc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpCi0gICAgICAgICAgICA/IEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgJmV4Y2VwdGlvbikKLSAgICAgICAgICAgIDogSlND
OjpjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhp
c1ZhbHVlLCBhcmdzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgICAgID8gSlNNYWluVGhyZWFkRXhl
Y1N0YXRlOjpjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pCisgICAgICAgICAgICA6IEpTQzo6Y2FsbChl
eGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwg
YXJncywgZXhjZXB0aW9uKTsKIAogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZENhbGxGdW5jdGlvbihjb29raWUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0
ZS5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE4ICs0NiwxOCBA
QCB2b2lkIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZGlkTGVhdmVTY3JpCiAgICAgTXV0YXRpb25P
YnNlcnZlcjo6ZGVsaXZlckFsbE11dGF0aW9ucygpOwogfQogCi1KU0M6OkpTVmFsdWUgZnVuY3Rp
b25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpD
YWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJn
TGlzdCYgYXJncywgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCitKU0M6OkpTVmFsdWUgZnVuY3Rp
b25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpD
YWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJn
TGlzdCYgYXJncywgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBp
ZiAoaXNNYWluVGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBKU01haW5UaHJlYWRFeGVjU3RhdGU6
OmNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVl
LCBhcmdzLCBleGNlcHRpb24pOwotICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb25P
YmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pOwor
ICAgICAgICByZXR1cm4gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9u
T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgcmV0dXJuZWRFeGNl
cHRpb24pOworICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGNhbGxU
eXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCByZXR1cm5lZEV4Y2VwdGlvbik7CiB9CiAK
LUpTQzo6SlNWYWx1ZSBldmFsdWF0ZUhhbmRsZXJGcm9tQW55VGhyZWFkKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCitKU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5k
bGVyRnJvbUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VD
b2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0
dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgaWYgKGlzTWFpblRocmVhZCgpKQotICAgICAgICByZXR1
cm4gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1
ZSwgZXhjZXB0aW9uKTsKLSAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRo
aXNWYWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTTWFpblRocmVhZEV4ZWNTdGF0
ZTo6ZXZhbHVhdGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIHJldHVybmVkRXhjZXB0aW9uKTsK
KyAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1ZSwgcmV0dXJu
ZWRFeGNlcHRpb24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE2ICs1MCwyMiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBzX21haW5UaHJlYWRTdGF0ZTsKICAgICB9OwogICAgIAotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY2FsbChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1
bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRh
JiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBh
cmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbikKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNh
bGwoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlND
OjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpFeGNlcHRp
b24qJiByZXR1cm5lZEV4Y2VwdGlvbikKICAgICB7CiAgICAgICAgIEpTTWFpblRocmVhZEV4ZWNT
dGF0ZSBjdXJyZW50U3RhdGUoZXhlYyk7Ci0gICAgICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywg
ZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNl
cHRpb24pOworICAgICAgICByZXR1cm4gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBj
YWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgcmV0dXJuZWRFeGNlcHRpb24pOwog
ICAgIH07CiAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBl
dmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3Vy
Y2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNl
cHRpb24pCiAgICAgewogICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGUgY3VycmVudFN0YXRl
KGV4ZWMpOwotICAgICAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNW
YWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6ZXZhbHVhdGUoZXhlYywgc291
cmNlLCB0aGlzVmFsdWUsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICB9OworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpT
b3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUgPSBKU0M6OkpTVmFsdWUo
KSkKKyAgICB7CisgICAgICAgIEpTQzo6RXhjZXB0aW9uKiB1bnVzZWQ7CisgICAgICAgIHJldHVy
biBldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1ZSwgdW51c2VkKTsKICAgICB9OwogCiAg
ICAgc3RhdGljIHZvaWQgcnVuVGFzayhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpNaWNyb3Rh
c2smIHRhc2spCkBAIC0xMjEsOCArMTI3LDggQEAgcHJpdmF0ZToKICAgICBKU0M6OkV4ZWNTdGF0
ZSogbV9wcmV2aW91c1N0YXRlOwogfTsKIAotSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uQ2FsbEhhbmRs
ZXJGcm9tQW55VGhyZWFkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2Jq
ZWN0LCBKU0M6OkNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiwgSlNDOjpKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlv
bik7Ci1KU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5kbGVyRnJvbUFueVRocmVhZChKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpT
Qzo6SlNWYWx1ZSogZXhjZXB0aW9uKTsKK0pTQzo6SlNWYWx1ZSBmdW5jdGlvbkNhbGxIYW5kbGVy
RnJvbUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgSlNDOjpDYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYsIEpTQzo6SlNWYWx1ZSB0aGlz
VmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5l
ZEV4Y2VwdGlvbik7CitKU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5kbGVyRnJvbUFueVRocmVhZChK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIEpTQzo6SlNWYWx1ZSB0aGlz
VmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pOwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFE
ZXZpY2VzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lZGlhRGV2aWNlc0N1c3RvbS5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFEZXZpY2VzQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgogI2luY2x1ZGUg
IkpTTWVkaWFTdHJlYW0uaCIKICNpbmNsdWRlICJKU05hdmlnYXRvclVzZXJNZWRpYUVycm9yLmgi
CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IApAQCAtNTAsNyArNTEsOSBAQCBKU1ZhbHVlIEpTTWVkaWFEZXZpY2VzOjpnZXRVc2VyTWVkaWEo
RXhlCiAKICAgICBEaWN0aW9uYXJ5IG9wdGlvbnMoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICB3cmFwcGVyLnJlamVjdChl
eGVjLT5leGNlcHRpb24oKSk7CisgICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+
ZXhjZXB0aW9uKCk7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHdy
YXBwZXIucmVqZWN0KGV4Y2VwdGlvbi0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybiB3cmFwcGVy
LnByb21pc2UoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TXV0YXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODcsOCArODcsOCBAQCB2b2lkIEpTTXV0YXRpb25DYWxsYmFjazo6Y2FsbChjb25zdCBW
ZWN0CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjppbnN0cnVtZW50RnVuY3Rpb25DYWxsKGNvbnRleHQsIGNhbGxUeXBl
LCBjYWxsRGF0YSk7CiAKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICBKU01haW5UaHJlYWRF
eGVjU3RhdGU6OmNhbGwoZXhlYywgY2FsbGJhY2ssIGNhbGxUeXBlLCBjYWxsRGF0YSwganNPYnNl
cnZlciwgYXJncywgJmV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CisgICAg
SlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGNhbGxiYWNrLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGpzT2JzZXJ2ZXIsIGFyZ3MsIGV4Y2VwdGlvbik7CiAKICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihjb29raWUsIGNvbnRleHQpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZUpTU3RyZWFtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZUpTU3RyZWFtLmNwcAkocmV2
aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVKU1N0
cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGdldFByb3BlcnR5RnJvbU9iagogICAgIHJldHVybiBvYmplY3QtPmdldChleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGlkZW50aWZpZXIpKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGNhbGxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUganNGdW5j
dGlvbiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cywgSlNWYWx1
ZSogZXhjZXB0aW9uKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGNhbGxGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUganNGdW5jdGlvbiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3VtZW50cywgRXhjZXB0aW9uKiYgZXhjZXB0aW9uKQogewogICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoanNGdW5jdGlv
biwgY2FsbERhdGEpOwpAQCAtMTAwLDggKzEwMCw4IEBAIHZvaWQgUmVhZGFibGVKU1N0cmVhbTo6
U291cmNlOjpzdGFydChFeGUKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAg
ICAgYXJndW1lbnRzLmFwcGVuZChyZWFkYWJsZVN0cmVhbS5qc0NvbnRyb2xsZXIoZXhlYywgZ2xv
YmFsT2JqZWN0KCkpKTsKIAotICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgIGNhbGxGdW5jdGlv
bigmZXhlYywgc3RhcnRGdW5jdGlvbiwgbV9zb3VyY2UuZ2V0KCksIGFyZ3VtZW50cywgJmV4Y2Vw
dGlvbik7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CisgICAgY2FsbEZ1bmN0aW9uKCZleGVj
LCBzdGFydEZ1bmN0aW9uLCBtX3NvdXJjZS5nZXQoKSwgYXJndW1lbnRzLCBleGNlcHRpb24pOwog
CiAgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAgICB0aHJvd1ZNRXJyb3IoJmV4ZWMsIGV4Y2Vw
dGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFj
dGlvbi5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDExICs5OSwxMSBAQCB2
b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZUZ1bmN0aW9uSW5DCiAKICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjppbnN0
cnVtZW50RnVuY3Rpb25DYWxsKCZjb250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwogCi0gICAg
SlNWYWx1ZSBleGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgaWYgKGlz
PERvY3VtZW50Pihjb250ZXh0KSkKLSAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxs
KGV4ZWMsIG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBh
cmdzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4
ZWMsIG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdz
LCBleGNlcHRpb24pOwogICAgIGVsc2UKLSAgICAgICAgSlNDOjpjYWxsKGV4ZWMsIG1fZnVuY3Rp
b24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCAmZXhjZXB0aW9u
KTsKKyAgICAgICAgSlNDOjpjYWxsKGV4ZWMsIG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBlLCBj
YWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pOwogCiAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCAmY29udGV4dCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDkgKzE2MCw4IEBAIERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXIKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0
ZVNjcmlwdChtX2ZyYW1lLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuc3RhcnRMaW5lKCkpOwogCi0g
ICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotCi0gICAgSlNWYWx1ZSByZXR1cm5WYWx1
ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywganNTb3VyY2VDb2RlLCBz
aGVsbCwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEV4Y2VwdGlvbiogZXZhbHVhdGlvbkV4
Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRl
OjpldmFsdWF0ZShleGVjLCBqc1NvdXJjZUNvZGUsIHNoZWxsLCBldmFsdWF0aW9uRXhjZXB0aW9u
KTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRXZhbHVhdGVTY3JpcHQoY29v
a2llLCBtX2ZyYW1lKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSA8cnVudGltZS9Cb29sZWFuT2JqZWN0
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KICNpbmNsdWRlIDxydW50aW1l
L0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KICNpbmNsdWRlIDxydW50
aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIu
aD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg+CkBAIC0yNzAyLDcgKzI3
MDMsNyBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsCiAgICAgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgdmFsdWUsIG51bGxwdHIsIG51bGxwdHIpOwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAg
ICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUo
KSk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KQEAgLTI3MzIsNyArMjczMyw3IEBAIEpTVmFsdWVSZWYgU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpkZXNlcmkKICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemUoZXhlYywgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBudWxscHRyKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24g
PSB0b1JlZihleGVjLCBleGVjLT5leGNlcHRpb24oKSk7CisgICAgICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoZXhlYywgZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCkpOwogICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDcgQEAKICNpbmNsdWRlIDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KICNpbmNsdWRlIDxpbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25I
ZWxwZXJzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNMb2NrLmg+CkBAIC05OCwxNSArOTksMTUgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZShjbwogICAgIGlmIChpc0V4ZWN1dGlvbkZvcmJpZGRlbigpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBleGNlcHRpb247Ci0gICAgZXZh
bHVhdGUoc291cmNlQ29kZSwgJmV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbi5qc1ZhbHVl
KCkpIHsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKKyAgICBldmFsdWF0ZShzb3VyY2VDb2Rl
LCBleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0oKSk7Ci0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihtX3dvcmtlckdsb2JhbFNjb3Bl
V3JhcHBlci0+Z2xvYmFsRXhlYygpLCBleGNlcHRpb24uanNWYWx1ZSgpKTsKKyAgICAgICAgcmVw
b3J0RXhjZXB0aW9uKG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCksIGV4
Y2VwdGlvbik7CiAgICAgfQogfQogCi12b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlKiBleGNlcHRpb24pCit2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRl
KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0
dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgaWYgKGlzRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTExNiw4ICsxMTcsOCBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXI6OmV2YWx1YXRlKGNvCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV93b3JrZXJHbG9iYWxTY29w
ZVdyYXBwZXItPmdsb2JhbEV4ZWMoKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAot
ICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsKLSAgICBKU0M6OmV2YWx1YXRlKGV4ZWMs
IHNvdXJjZUNvZGUuanNTb3VyY2VDb2RlKCksIG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5n
bG9iYWxUaGlzKCksICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBKU0M6OkV4Y2VwdGlvbiog
ZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU0M6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZUNvZGUu
anNTb3VyY2VDb2RlKCksIG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxUaGlzKCks
IGV2YWx1YXRpb25FeGNlcHRpb24pOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBp
ZiAoKGV2YWx1YXRpb25FeGNlcHRpb24gJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9u
KGV2YWx1YXRpb25FeGNlcHRpb24pKSAKQEAgLTEzMSwxNiArMTMyLDE5IEBAIHZvaWQgV29ya2Vy
U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAw
OwogICAgICAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKICAgICAgICAgU3RyaW5nIHNvdXJjZVVS
TCA9IHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCk7Ci0gICAgICAgIGlmIChtX3dvcmtlckdsb2Jh
bFNjb3BlLT5zYW5pdGl6ZVNjcmlwdEVycm9yKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29s
dW1uTnVtYmVyLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuY2FjaGVkU2NyaXB0KCkpKQotICAgICAg
ICAgICAgKmV4Y2VwdGlvbiA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCptX3ZtLCBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZS5p
bXBsKCkpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSgqbV92bSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgICAgIGlm
IChtX3dvcmtlckdsb2JhbFNjb3BlLT5zYW5pdGl6ZVNjcmlwdEVycm9yKGVycm9yTWVzc2FnZSwg
bGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VVUkwsIHNvdXJjZUNvZGUuY2FjaGVkU2Ny
aXB0KCkpKSB7CisgICAgICAgICAgICB2bS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVFcnJv
cihleGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSk7CisgICAgICAgICAgICBldmFsdWF0aW9uRXhj
ZXB0aW9uID0gdm0uZXhjZXB0aW9uKCk7CisgICAgICAgICAgICB2bS5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICB9CiAgICAgfQorICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXZhbHVhdGlvbkV4
Y2VwdGlvbjsKIH0KIAotdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzZXRFeGNlcHRpb24o
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGV4Y2VwdGlvbikKK3ZvaWQgV29ya2VyU2Ny
aXB0Q29udHJvbGxlcjo6c2V0RXhjZXB0aW9uKEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24pCiB7
Ci0gICAgbV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbEV4ZWMoKS0+dm0oKS50aHJv
d0V4Y2VwdGlvbihtX3dvcmtlckdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsRXhlYygpLCBleGNl
cHRpb24uanNWYWx1ZSgpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2VyR2xv
YmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCk7CisgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBleGNlcHRpb24pOwogfQogCiB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
OnNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24oKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTg1
MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw5ICs2MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29k
ZSYpOwotICAgICAgICB2b2lkIGV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmLCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSogZXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBldmFsdWF0ZShj
b25zdCBTY3JpcHRTb3VyY2VDb2RlJiwgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlv
bik7CiAKLSAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmKTsKKyAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oSlNDOjpFeGNlcHRpb24qKTsKIAog
ICAgICAgICAvLyBBc3luYyByZXF1ZXN0IHRvIHRlcm1pbmF0ZSBhIEpTIHJ1biBleGVjdXRpb24u
IEV2ZW50dWFsbHkgY2F1c2VzIHRlcm1pbmF0aW9uCiAgICAgICAgIC8vIGV4Y2VwdGlvbiByYWlz
ZWQgZHVyaW5nIEpTIGV4ZWN1dGlvbiwgaWYgdGhlIHdvcmtlciB0aHJlYWQgaGFwcGVucyB0byBy
dW4gSlMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1
Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cnVuRXZl
bnRMbwogICAgIH0gd2hpbGUgKHJlc3VsdCAhPSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkICYmICFt
X2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMpOwogfQogCi12b2lkIFdvcmtlclNjcmlwdERl
YnVnU2VydmVyOjpyZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSBleGNlcHRpb24pIGNvbnN0Cit2b2lkIFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjpyZXBv
cnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRp
b24pIGNvbnN0CiB7CiAgICAgV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1
Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtl
clNjcmlwdERlYnVnU2VydmVyLmgJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoSlND
OjpKU0dsb2JhbE9iamVjdCopIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBydW5FdmVu
dExvb3BXaGlsZVBhdXNlZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRT
Y3JpcHQoSlNDOjpFeGVjU3RhdGUqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiopIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
V29ya2VyR2xvYmFsU2NvcGUqIG1fd29ya2VyR2xvYmFsU2NvcGU7CiAgICAgTGlzdGVuZXJTZXQg
bV9saXN0ZW5lcnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlw
dE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dl
YlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMTg1MTEwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3ICsx
MjEsNyBAQCBpZCBjcmVhdGVKU1dyYXBwZXIoSlNDOjpKU09iamVjdCogb2JqZWN0CiAgICAgcmV0
dXJuIFtbW1dlYlNjcmlwdE9iamVjdCBhbGxvY10gX2luaXRXaXRoSlNPYmplY3Q6b2JqZWN0IG9y
aWdpblJvb3RPYmplY3Q6b3JpZ2luIHJvb3RPYmplY3Q6cm9vdF0gYXV0b3JlbGVhc2VdOwogfQog
Ci1zdGF0aWMgdm9pZCBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoRXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTVmFsdWUmIGV4Y2VwdGlvbikKK3N0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShF
eGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAgICAgSlNET01X
aW5kb3cqIHdpbmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgp
KTsKICAgICBpZiAoIXdpbmRvdyB8fCAhZXhjZXB0aW9uKQpAQCAtMTMxLDcgKzEzMSw3IEBAIHN0
YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShFeGVjU3QKIAogc3RhdGljIHZvaWQgYWRk
RXhjZXB0aW9uVG9Db25zb2xlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0M6OkpTVmFsdWUg
ZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2Vw
dGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CkBAIC0zNDIsOCAr
MzQyLDggQEAgLSAoaWQpY2FsbFdlYlNjcmlwdE1ldGhvZDooTlNTdHJpbmcgKiluYQogICAgIGlm
ICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBKU0M6
OkpTVmFsdWUgZXhjZXB0aW9uOwotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBKU01haW5UaHJl
YWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgW3Nl
bGYgX2ltcF0sIGFyZ0xpc3QsICZleGNlcHRpb24pOworICAgIEpTQzo6RXhjZXB0aW9uKiBleGNl
cHRpb247CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6
Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBbc2VsZiBfaW1wXSwgYXJn
TGlzdCwgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgYWRkRXhj
ZXB0aW9uVG9Db25zb2xlKGV4ZWMsIGV4Y2VwdGlvbik7CkBAIC0zNjYsNyArMzY2LDcgQEAgLSAo
aWQpZXZhbHVhdGVXZWJTY3JpcHQ6KE5TU3RyaW5nICopc2NyaQogCiAgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgCi0gICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQp
KSwgSlNDOjpKU1ZhbHVlKCksIDApOworICAgIEpTQzo6SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpT
TWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywgbWFrZVNvdXJjZShTdHJpbmcoc2Ny
aXB0KSksIEpTQzo6SlNWYWx1ZSgpKTsKIAogICAgIGlkIHJlc3VsdE9iaiA9IFtXZWJTY3JpcHRP
YmplY3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJldHVyblZhbHVlIG9yaWdpblJvb3RPYmpl
Y3Q6W3NlbGYgX29yaWdpblJvb3RPYmplY3RdIHJvb3RPYmplY3Q6W3NlbGYgX3Jvb3RPYmplY3Rd
XTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVGltZWxpbmVBZ2VudC5jcHAJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzE5LDcgKzMxOSw4IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ2FsbEZ1bmMK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIFRpbWVsaW5lUmVjb3JkRW50
cnkmIGVudHJ5ID0gbV9yZWNvcmRTdGFjay5sYXN0KCk7Ci0gICAgICAgICAgICBBU1NFUlQoZW50
cnkudHlwZSA9PSBUaW1lbGluZVJlY29yZFR5cGU6OkZ1bmN0aW9uQ2FsbCk7CisgICAgICAgICAg
ICAvLyBGSVhNRTogdGVtcCBIQUNLIGZvciB0ZXN0aW5nLiBEbyBub3QgbGFuZCEKKyAgICAgICAg
ICAgIC8vIEFTU0VSVChlbnRyeS50eXBlID09IFRpbWVsaW5lUmVjb3JkVHlwZTo6RnVuY3Rpb25D
YWxsKTsKIAogICAgICAgICAgICAgUmVmUHRyPEpTQzo6UHJvZmlsZT4gcHJvZmlsZSA9IHN0b3BQ
cm9maWxpbmcoZnJhbWUsIEFTQ0lJTGl0ZXJhbCgiVGltZWxpbmUgRnVuY3Rpb25DYWxsIikpOwog
ICAgICAgICAgICAgaWYgKHByb2ZpbGUpCkBAIC03MDIsNyArNzAzLDggQEAgdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpkaWRDb21wbGV0ZQogICAgIGlmICghbV9yZWNvcmRTdGFjay5pc0Vt
cHR5KCkpIHsKICAgICAgICAgVGltZWxpbmVSZWNvcmRFbnRyeSBlbnRyeSA9IG1fcmVjb3JkU3Rh
Y2subGFzdCgpOwogICAgICAgICBtX3JlY29yZFN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRCh0eXBlLCBlbnRyeS50eXBlID09IHR5cGUpOworICAgICAgICAvLyBBU1NF
UlRfVU5VU0VEKHR5cGUsIGVudHJ5LnR5cGUgPT0gdHlwZSk7CisgICAgICAgIFVOVVNFRF9QQVJB
TSh0eXBlKTsgLy8gRklYTUU6IHRlbXAgSEFDSyBmb3IgdGVzdGluZy4gRG8gbm90IGxhbmQhCiAg
ICAgICAgIGRpZENvbXBsZXRlUmVjb3JkRW50cnkoZW50cnkpOwogICAgIH0KIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
CShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlw
dERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIGJvb2wg
UGFnZVNjcmlwdERlYnVnU2VydmVyOjppc0NvbnRlbnRTY3IKICAgICByZXR1cm4gJmN1cnJlbnRX
b3JsZChleGVjKSAhPSAmbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7CiB9CiAKLXZvaWQgUGFnZVNj
cmlwdERlYnVnU2VydmVyOjpyZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGV4Y2VwdGlvbikgY29uc3QKK3ZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZXBvcnRFeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikgY29uc3QKIHsKICAg
ICBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmgJKHJl
dmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVi
dWdTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kikgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHJ1bkV2ZW50TG9vcFdoaWxlUGF1c2VkKCkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBib29sIGlzQ29udGVudFNjcmlwdChKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRF
eGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiopIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgdm9pZCBydW5FdmVudExvb3BXaGlsZVBhdXNlZEludGVybmFsKCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCShyZXZpc2lv
biAxODUxMTApCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDkgKzE5Nyw5IEBAIHZvaWQgV29ya2VyR2xvYmFsU2Nv
cGU6OmltcG9ydFNjcmlwdHMoY28KIAogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OnNjcmlwdEltcG9ydGVkKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc2NyaXB0TG9hZGVyLT5p
ZGVudGlmaWVyKCksIHNjcmlwdExvYWRlci0+c2NyaXB0KCkpOwogCi0gICAgICAgIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIGV4Y2VwdGlvbjsKLSAgICAgICAgbV9zY3JpcHQtPmV2YWx1YXRlKFNj
cmlwdFNvdXJjZUNvZGUoc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSwgc2NyaXB0TG9hZGVyLT5yZXNw
b25zZVVSTCgpKSwgJmV4Y2VwdGlvbik7Ci0gICAgICAgIGlmICghZXhjZXB0aW9uLmhhc05vVmFs
dWUoKSkgeworICAgICAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uOworICAgICAgICBtX3Nj
cmlwdC0+ZXZhbHVhdGUoU2NyaXB0U291cmNlQ29kZShzY3JpcHRMb2FkZXItPnNjcmlwdCgpLCBz
Y3JpcHRMb2FkZXItPnJlc3BvbnNlVVJMKCkpLCBleGNlcHRpb24pOworICAgICAgICBpZiAoZXhj
ZXB0aW9uKSB7CiAgICAgICAgICAgICBtX3NjcmlwdC0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RlYnVnZ2VyTWFuYWdlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9E
ZWJ1Z2dlck1hbmFnZXIuanMJKHJldmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RlYnVnZ2VyTWFuYWdlci5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNDU4LDYgKzQ1OCw4IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIg
PSBjbGFzcyBEZWIKICAgICAgICAgaWYgKHRoaXMuX2RlbGF5ZWRSZXN1bWVUaW1lb3V0KSB7CiAg
ICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fZGVsYXllZFJlc3VtZVRpbWVvdXQpOwogICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuX2RlbGF5ZWRSZXN1bWVUaW1lb3V0OworCisgICAgICAgICAg
ICB0aGlzLmRlbGF5ZWRSZXN1bWVXb3JrKCk7IC8vIEZJWE1FOiB0ZW1wIEhBQ0sgZm9yIHRlc3Rp
bmcuICBEbyBub3QgbGFuZCEKICAgICAgICAgfQogCiAgICAgICAgIHZhciB3YXNTdGlsbFBhdXNl
ZCA9IHRoaXMuX3BhdXNlZDsKQEAgLTQ5MywxMCArNDk1LDI0IEBAIFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1hbmFnZXIgPSBjbGFzcyBEZWIKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5BY3RpdmVDYWxsRnJhbWVE
aWRDaGFuZ2UpOwogICAgIH0KIAorICAgIGRlbGF5ZWRSZXN1bWVXb3JrKCkKKyAgICB7CisgICAg
ICAgIGRlbGV0ZSB0aGlzLl9kZWxheWVkUmVzdW1lVGltZW91dDsKKyAgICAgICAgCisgICAgICAg
IHRoaXMuX3BhdXNlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9jYWxsRnJhbWVzID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fYWN0aXZlQ2FsbEZyYW1lID0gbnVsbDsKKyAgICAgICAgCisgICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFn
ZXIuRXZlbnQuUmVzdW1lZCk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQ2FsbEZyYW1lc0RpZENoYW5nZSk7
CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1hbmFnZXIuRXZlbnQuQWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlKTsKKyAgICB9CisKICAg
ICBkZWJ1Z2dlckRpZFJlc3VtZSgpCiAgICAgewogICAgICAgICAvLyBDYWxsZWQgZnJvbSBXZWJJ
bnNwZWN0b3IuRGVidWdnZXJPYnNlcnZlci4KIAorICAgICAgICAvLyBGSVhNRTogdGVtcCBIQUNL
IGZvciB0ZXN0aW5nLiAgRG8gbm90IGxhbmQhCiAgICAgICAgIGZ1bmN0aW9uIGRlbGF5ZWRXb3Jr
KCkKICAgICAgICAgewogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2RlbGF5ZWRSZXN1bWVUaW1l
b3V0OwpAQCAtNTEzLDYgKzUyOSw3IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIgPSBj
bGFzcyBEZWIKICAgICAgICAgLy8gV2UgZGVsYXkgY2xlYXJpbmcgdGhlIHN0YXRlIGFuZCBmaXJp
bmcgZXZlbnRzIHNvIHRoZSB1c2VyIGludGVyZmFjZSBkb2VzIG5vdCBmbGFzaAogICAgICAgICAv
LyBiZXR3ZWVuIGJyaWVmIHN0ZXBzIG9yIHN1Y2Nlc3NpdmUgYnJlYWtwb2ludHMuCiAgICAgICAg
IHRoaXMuX2RlbGF5ZWRSZXN1bWVUaW1lb3V0ID0gc2V0VGltZW91dChkZWxheWVkV29yay5iaW5k
KHRoaXMpLCA1MCk7CisvLyAgICAgICAgdGhpcy5fZGVsYXllZFJlc3VtZVRpbWVvdXQgPSBzZXRU
aW1lb3V0KHRoaXMuZGVsYXllZFJlc3VtZVdvcmsuYmluZCh0aGlzKSwgNTApOyAvLyBGSVhNRTog
dGVtcCBIQUNLIGZvciB0ZXN0aW5nLiAgRG8gbm90IGxhbmQhCiAgICAgfQogCiAgICAgcGxheUJy
ZWFrcG9pbnRBY3Rpb25Tb3VuZChicmVha3BvaW50QWN0aW9uSWRlbnRpZmllcikKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0V4Y2VwdGlv
bkluc3BlYy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2UuaD4KQEAgLTUyMiw3ICs1MjMsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxl
OjpyZXBvcnRFeGNlcHRpb24oSlNDCiAgICAgaWYgKCF0b0pTRE9NV2luZG93KGV4ZWNTdGF0ZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViQ29yZTo6
cmVwb3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgdG9KUyhleGVjU3RhdGUsIGV4Y2VwdGlvbikpOwor
ICAgIFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbihleGVjU3RhdGUsIEV4Y2VwdGlvbjo6Y2FzdCh0
b0pTKGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpk
aWRDcmVhdGVQYWdlKFdlYlBhZ2UqIHBhZ2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tCShyZXZpc2lvbiAxODUxMTApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsNyBAQAogI2ltcG9ydCA8
Q29yZUZvdW5kYXRpb24vQ0ZTZXQuaD4KICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxDb25uZWN0
aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9FeGNlcHRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVS
ZWYuaD4KICNpbXBvcnQgPFdlYkNvcmUvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0FuaW1hdGlvbkNvbnRyb2xsZXIuaD4KQEAgLTcyNCw3ICs3MjUsOCBA
QCArICh2b2lkKV9yZXBvcnRFeGNlcHRpb246KEpTVmFsdWVSZWYpZXhjCiAgICAgaWYgKCF0b0pT
RE9NV2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgdG9KUyhleGVjU3RhdGUsIGV4
Y2VwdGlvbikpOworICAgIEV4Y2VwdGlvbiogdm1FeGNlcHRpb24gPSBFeGNlcHRpb246OmNhc3Qo
dG9KUyhleGVjU3RhdGUsIGV4Y2VwdGlvbikpOworICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjU3Rh
dGUsIHZtRXhjZXB0aW9uKTsKIH0KIAogc3RhdGljIHZvaWQgV2ViS2l0SW5pdGlhbGl6ZUFwcGxp
Y2F0aW9uQ2FjaGVQYXRoSWZOZWNlc3NhcnkoKQpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2Vi
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJl
dmlzaW9uIDE4NTExMCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MDI5LDcgKzYwMjksOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdl
YlZpZXc6OnJlcG9yCiAgICAgaWYgKCF0b0pTRE9NV2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIFdlYkNvcmU6OnJl
cG9ydEV4Y2VwdGlvbihleGVjU3RhdGUsIHRvSlMoZXhlY1N0YXRlLCBleGNlcHRpb24pKTsKKyAg
ICBKU0M6OkV4Y2VwdGlvbiogdm1FeGNlcHRpb24gPSBKU0M6OkV4Y2VwdGlvbjo6Y2FzdCh0b0pT
KGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKSk7CisgICAgV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKGV4
ZWNTdGF0ZSwgdm1FeGNlcHRpb24pOwogICAgIHJldHVybiBTX09LOwogfQogCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9yZWdyZXNzLTEzMTUzMC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVncmVzcy0xMzE1MzAtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAxODUxMTApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZWdyZXNzLTEzMTUzMC1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiBDT05TT0xFIE1FU1NBR0U6
IGxpbmUgNTogRXhjZXB0aW9uIHRvIHRyaWdnZXIgdW53aW5kaW5nIGluIE11dGF0aW9uT2JzZXJ2
ZXIKLUNPTlNPTEUgTUVTU0FHRTogUGVuZGluZyBleGNlcHRpb24gYmVmb3JlIE11dGF0aW9uT2Jz
ZXJ2ZXJzIGFyZSBjYWxsZWQuCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMjI6IFBlbmRpbmcgZXhj
ZXB0aW9uIGJlZm9yZSBNdXRhdGlvbk9ic2VydmVycyBhcmUgY2FsbGVkLgogUmVncmVzc2lvbiB0
ZXN0IGZvciBodHRwczovL3dlYmtpdC5vcmcvYi8xMzE1MzAuIFRoaXMgdGVzdCBzaG91bGQgbm90
IGNyYXNoLgogCiBNdXRhdGUgdGhhdCBub2RlCkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
ZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9ucy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbnMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2Jy
ZWFrLW9uLWV4Y2VwdGlvbnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzUgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBQYXNzIDE6IHRlc3RFeGNlcHRpb25zIHdp
dGggYnJlYWsgb24gYWxsIGV4Y2VwdGlvbnMKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA3OiBmb286
IHRyeQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDk6IGZvbzogZm9yLi4ub2Y6IGkgPSAxCitDT05T
T0xFIE1FU1NBR0U6IGxpbmUgMTE6IGZvbzogdGhyb3cgIlRlc3RFcnJvciIKK0NPTlNPTEUgTUVT
U0FHRTogbGluZSAxNjogZm9vOiBjYXRjaCBUZXN0RXJyb3IKK0NPTlNPTEUgTUVTU0FHRTogbGlu
ZSAxOTogZm9vOiBmaW5hbGx5CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMjogV2luZG93Lm9uZXJy
b3I6IFRlc3RFcnJvcgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE3OiBUZXN0RXJyb3IKK0NPTlNP
TEUgTUVTU0FHRTogbGluZSAxOiBQYXNzIDI6IHRlc3RQcm9taXNlcyB3aXRoIGJyZWFrIG9uIGFs
bCBleGNlcHRpb25zCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMzY6IFByb21pc2U6IHRoZW4KK0NP
TlNPTEUgTUVTU0FHRTogbGluZSA3OiBmb286IHRyeQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDk6
IGZvbzogZm9yLi4ub2Y6IGkgPSAxCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTE6IGZvbzogdGhy
b3cgIlRlc3RFcnJvciIKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxNjogZm9vOiBjYXRjaCBUZXN0
RXJyb3IKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOTogZm9vOiBmaW5hbGx5CitDT05TT0xFIE1F
U1NBR0U6IGxpbmUgMzk6IFByb21pc2U6IGNhdGNoIFRlc3RFcnJvcgorQ09OU09MRSBNRVNTQUdF
OiBsaW5lIDE6IFBhc3MgMzogdGVzdEV4Y2VwdGlvbnMgd2l0aCBicmVhayBvbiB1bmNhdWdodCBl
eGNlcHRpb25zCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNzogZm9vOiB0cnkKK0NPTlNPTEUgTUVT
U0FHRTogbGluZSA5OiBmb286IGZvci4uLm9mOiBpID0gMQorQ09OU09MRSBNRVNTQUdFOiBsaW5l
IDExOiBmb286IHRocm93ICJUZXN0RXJyb3IiCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTY6IGZv
bzogY2F0Y2ggVGVzdEVycm9yCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTk6IGZvbzogZmluYWxs
eQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDI6IFdpbmRvdy5vbmVycm9yOiBUZXN0RXJyb3IKK0NP
TlNPTEUgTUVTU0FHRTogbGluZSAxNzogVGVzdEVycm9yCitDT05TT0xFIE1FU1NBR0U6IGxpbmUg
MTogUGFzcyA0OiB0ZXN0UHJvbWlzZXMgd2l0aCBicmVhayBvbiB1bmNhdWdodCBleGNlcHRpb25z
CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMzY6IFByb21pc2U6IHRoZW4KK0NPTlNPTEUgTUVTU0FH
RTogbGluZSA3OiBmb286IHRyeQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDk6IGZvbzogZm9yLi4u
b2Y6IGkgPSAxCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTE6IGZvbzogdGhyb3cgIlRlc3RFcnJv
ciIKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxNjogZm9vOiBjYXRjaCBUZXN0RXJyb3IKK0NPTlNP
TEUgTUVTU0FHRTogbGluZSAxOTogZm9vOiBmaW5hbGx5CitDT05TT0xFIE1FU1NBR0U6IGxpbmUg
Mzk6IFByb21pc2U6IGNhdGNoIFRlc3RFcnJvcgorVGVzdCB0aGF0IHBhdXNpbmcgaW4gZGlmZmVy
ZW50IHdheXMgdHJpZ2dlcnMgZGlmZmVyZW50IHBhdXNlIHJlYXNvbnMuCisKK1BBVVNFICMxCisg
IFJFQVNPTjogZXhjZXB0aW9uCitQYXVzZWQgYXQgZm9vOjEyOjM0CitSRVNVTUVECisKK1BBVVNF
ICMyCisgIFJFQVNPTjogZXhjZXB0aW9uCitQYXVzZWQgYXQgZm9vOjE3OjE2CitSRVNVTUVECisK
K1BBVVNFICMzCisgIFJFQVNPTjogZXhjZXB0aW9uCitQYXVzZWQgYXQgZm9vOjEyOjM0CitSRVNV
TUVECisKK1BBVVNFICM0CisgIFJFQVNPTjogZXhjZXB0aW9uCitQYXVzZWQgYXQgZm9vOjE3OjE2
CitSRVNVTUVECisKK1BBVVNFICM1CisgIFJFQVNPTjogZXhjZXB0aW9uCitQYXVzZWQgYXQgcHJv
bWlzZUNhdGNoOjQwOjE2CitSRVNVTUVECisKK1BBVVNFICM2CisgIFJFQVNPTjogZXhjZXB0aW9u
CitQYXVzZWQgYXQgZm9vOjE3OjE2CitSRVNVTUVECisKK1BBVVNFICM3CisgIFJFQVNPTjogZXhj
ZXB0aW9uCitQYXVzZWQgYXQgZm9vOjE3OjE2CitSRVNVTUVECisKK1BBVVNFICM4CisgIFJFQVNP
TjogZXhjZXB0aW9uCitQYXVzZWQgYXQgcHJvbWlzZUNhdGNoOjQwOjE2CitSRVNVTUVECisKKwpJ
bmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbnMu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWst
b24tZXhjZXB0aW9ucy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbnMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE3NSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVj
dG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iLi9yZXNvdXJjZXMvYnJlYWstb24tZXhjZXB0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
PgorZnVuY3Rpb24gdGVzdCgpCit7CisgICAgdmFyIHBhdXNlcyA9IDA7CisgICAgdmFyIGluZGV4
ID0gMDsKKworICAgIGZ1bmN0aW9uIGVuYWJsZUJyZWFrT25BbGxFeGNlcHRpb25zKCkgeworICAg
ICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFsbEV4Y2VwdGlvbnNCcmVha3BvaW50
LmRpc2FibGVkID0gZmFsc2U7CisgICAgfQorCisgICAgZnVuY3Rpb24gZGlzYWJsZUJyZWFrT25B
bGxFeGNlcHRpb25zKCkgeworICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFs
bEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBlbmFibGVCcmVha09uVW5jYXVnaHRFeGNlcHRpb25zKCkgeworICAgICAgICBXZWJJbnNw
ZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFsbFVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQuZGlz
YWJsZWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkaXNhYmxlQnJlYWtPblVuY2F1
Z2h0RXhjZXB0aW9ucygpIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5h
bGxVbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gdHJ1ZTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiB0aXRsZShzdHIpIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0
ZUluUGFnZSgic2V0VGltZW91dChmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJyIgKyBzdHIgKyAi
Jyk7IH0sIDApIik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdENhc2UodGVzdCkgewor
ICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJzZXRUaW1lb3V0KCIgKyB0ZXN0
ICsgIiwgMCkiKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkdW1wUGF1c2VMb2NhdGlvbigpIHsK
KyAgICAgICAgdmFyIGNhbGxGcmFtZSA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWN0
aXZlQ2FsbEZyYW1lOworICAgICAgICBpZiAoY2FsbEZyYW1lKSB7CisgICAgICAgICAgICB2YXIg
ZnVuY05hbWUgPSBjYWxsRnJhbWUuZnVuY3Rpb25OYW1lIHx8ICI8YW5vbnltb3VzPiI7CisgICAg
ICAgICAgICB2YXIgbG9jYXRpb24gPSBjYWxsRnJhbWUuc291cmNlQ29kZUxvY2F0aW9uOworICAg
ICAgICAgICAgdmFyIGxpbmUgPSBsb2NhdGlvbi5saW5lTnVtYmVyICsgMTsKKyAgICAgICAgICAg
IHZhciBjb2x1bW4gPSBsb2NhdGlvbi5jb2x1bW5OdW1iZXIgKyAxOworCisgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmxvZygiUGF1c2VkIGF0ICIgKyBmdW5jTmFtZSArICI6IiArIGxpbmUgKyAi
OiIgKyBjb2x1bW4pOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
bG9nKCJQYXVzZWQgYXQgIiArIGNhbGxGcmFtZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gbm90
aGluZ1RvRG8oKSB7CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVzdW1lKCkgeworICAgICAgICBX
ZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnJlc3VtZSgpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGRvbmUoKSB7CisgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7CisgICAg
fQorCisgICAgdmFyIHN0ZXBzID0gWworICAgICAgICAvLyBQYXNzIDEKKyAgICAgICAgeyBleHBy
ZXNzaW9uOgorICAgICAgICAgICAgImVuYWJsZUJyZWFrT25BbGxFeGNlcHRpb25zKCk7IiArCisg
ICAgICAgICAgICAidGl0bGUoJ1Bhc3MgMTogdGVzdEV4Y2VwdGlvbnMgd2l0aCBicmVhayBvbiBh
bGwgZXhjZXB0aW9ucycpOyIgKworICAgICAgICAgICAgInJ1blRlc3RDYXNlKCd0ZXN0RXhjZXB0
aW9ucycpOyIKKyAgICAgICAgfSwKKyAgICAgICAgeyBleHByZXNzaW9uOiAvLyBwYXVzZWQgYXQg
VGhyb3cgUG9pbnQgMS4KKyAgICAgICAgICAgICJkdW1wUGF1c2VMb2NhdGlvbigpOyIgKworICAg
ICAgICAgICAgInJlc3VtZSgpOyIKKyAgICAgICAgfSwKKyAgICAgICAgeyBleHByZXNzaW9uOiAv
LyByZXN1bWVkIGZyb20gVGhyb3cgUG9pbnQgMS4KKyAgICAgICAgICAgICJub3RoaW5nVG9Ebygp
OyIKKyAgICAgICAgfSwKKyAgICAgICAgeyBleHByZXNzaW9uOiAvLyBwYXVzZWQgYXQgVGhyb3cg
UG9pbnQgMi4KKyAgICAgICAgICAgICJkdW1wUGF1c2VMb2NhdGlvbigpOyIgKworICAgICAgICAg
ICAgInJlc3VtZSgpOyIKKyAgICAgICAgfSwKKworICAgICAgICAvLyBQYXNzIDI6CisgICAgICAg
IHsgZXhwcmVzc2lvbjogLy8gcmVzdW1lZCBmcm9tIFRocm93IFBvaW50IDIuCisgICAgICAgICAg
ICAidGl0bGUoJ1Bhc3MgMjogdGVzdFByb21pc2VzIHdpdGggYnJlYWsgb24gYWxsIGV4Y2VwdGlv
bnMnKTsiICsKKyAgICAgICAgICAgICJydW5UZXN0Q2FzZSgndGVzdFByb21pc2VzJyk7IgorICAg
ICAgICB9LAorICAgICAgICB7IGV4cHJlc3Npb246IC8vIHBhdXNlZCBhdCBUaHJvdyBQb2ludCAx
LgorICAgICAgICAgICAgImR1bXBQYXVzZUxvY2F0aW9uKCk7IiArCisgICAgICAgICAgICAicmVz
dW1lKCk7IgorICAgICAgICB9LAorICAgICAgICB7IGV4cHJlc3Npb246IC8vIHJlc3VtZWQgZnJv
bSBUaHJvdyBQb2ludCAxLgorICAgICAgICAgICAgIm5vdGhpbmdUb0RvKCk7IgorICAgICAgICB9
LAorICAgICAgICB7IGV4cHJlc3Npb246IC8vIHBhdXNlZCBhdCBUaHJvdyBQb2ludCAyLgorICAg
ICAgICAgICAgImR1bXBQYXVzZUxvY2F0aW9uKCk7IiArCisgICAgICAgICAgICAicmVzdW1lKCk7
IgorICAgICAgICB9LAorICAgICAgICB7IGV4cHJlc3Npb246IC8vIHJlc3VtZWQgZnJvbSBUaHJv
dyBQb2ludCAyLgorICAgICAgICAgICAgIm5vdGhpbmdUb0RvKCk7IgorICAgICAgICB9LAorICAg
ICAgICB7IGV4cHJlc3Npb246IC8vIHBhdXNlZCBhdCBUaHJvdyBQb2ludCAzLgorICAgICAgICAg
ICAgImR1bXBQYXVzZUxvY2F0aW9uKCk7IiArCisgICAgICAgICAgICAicmVzdW1lKCk7IgorICAg
ICAgICB9LAorCisgICAgICAgIC8vIFBhc3MgMworICAgICAgICB7IGV4cHJlc3Npb246IC8vIHJl
c3VtZWQgZnJvbSBUaHJvdyBQb2ludCAzLgorICAgICAgICAgICAgImRpc2FibGVCcmVha09uQWxs
RXhjZXB0aW9ucygpOyAiICsKKyAgICAgICAgICAgICJlbmFibGVCcmVha09uVW5jYXVnaHRFeGNl
cHRpb25zKCk7ICIgKworICAgICAgICAgICAgInRpdGxlKCdQYXNzIDM6IHRlc3RFeGNlcHRpb25z
IHdpdGggYnJlYWsgb24gdW5jYXVnaHQgZXhjZXB0aW9ucycpOyIgKworICAgICAgICAgICAgInJ1
blRlc3RDYXNlKCd0ZXN0RXhjZXB0aW9ucycpOyIKKyAgICAgICAgfSwKKyAgICAgICAgeyBleHBy
ZXNzaW9uOiAvLyBwYXVzZWQgYXQgVGhyb3cgUG9pbnQgMi4KKyAgICAgICAgICAgICJkdW1wUGF1
c2VMb2NhdGlvbigpOyIgKworICAgICAgICAgICAgInJlc3VtZSgpOyIKKyAgICAgICAgfSwKKwor
ICAgICAgICAvLyBQYXNzIDQKKyAgICAgICAgeyBleHByZXNzaW9uOiAvLyByZXN1bWVkIGZyb20g
VGhyb3cgUG9pbnQgMi4KKyAgICAgICAgICAgICJ0aXRsZSgnUGFzcyA0OiB0ZXN0UHJvbWlzZXMg
d2l0aCBicmVhayBvbiB1bmNhdWdodCBleGNlcHRpb25zJyk7IiArCisgICAgICAgICAgICAicnVu
VGVzdENhc2UoJ3Rlc3RQcm9taXNlcycpOyIKKyAgICAgICAgfSwKKyAgICAgICAgeyBleHByZXNz
aW9uOiAvLyBwYXVzZWQgYXQgVGhyb3cgUG9pbnQgMi4KKyAgICAgICAgICAgICJkdW1wUGF1c2VM
b2NhdGlvbigpOyIgKworICAgICAgICAgICAgInJlc3VtZSgpOyIKKyAgICAgICAgfSwKKyAgICAg
ICAgeyBleHByZXNzaW9uOiAvLyByZXN1bWVkIGZyb20gVGhyb3cgUG9pbnQgMi4KKyAgICAgICAg
ICAgICJub3RoaW5nVG9EbygpOyIKKyAgICAgICAgfSwKKyAgICAgICAgeyBleHByZXNzaW9uOiAv
LyBwYXVzZWQgYXQgVGhyb3cgUG9pbnQgMy4KKyAgICAgICAgICAgICJkdW1wUGF1c2VMb2NhdGlv
bigpOyIgKworICAgICAgICAgICAgInJlc3VtZSgpOyIKKyAgICAgICAgfSwKKworICAgICAgICAv
LyBUaGUgZW5kCisgICAgICAgIHsgZXhwcmVzc2lvbjogLy8gcmVzdW1lZCBmcm9tIFRocm93IFBv
aW50IDMuCisgICAgICAgICAgICAiZG9uZSgpOyIKKyAgICAgICAgfSwKKyAgICBdOworCisgICAg
ZnVuY3Rpb24gbmV4dFN0ZXAoKQorICAgIHsKKyAgICAgICAgdmFyIHN0ZXAgPSBzdGVwc1tpbmRl
eCsrXTsKKyAgICAgICAgaWYgKCFzdGVwKSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNv
bXBsZXRlVGVzdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGV2
YWwoc3RlcC5leHByZXNzaW9uKTsKKyAgICB9CisKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVu
dC5TY3JpcHRBZGRlZCwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIHNjcmlwdE9iamVj
dCA9IGV2ZW50LmRhdGEuc2NyaXB0OworICAgICAgICBpZiAoIS9icmVhay1vbi1leGNlcHRpb25z
XC5qcyQvLnRlc3Qoc2NyaXB0T2JqZWN0LnVybCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIG5leHRTdGVwKCk7CisgICAgfSk7CisKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5h
Z2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5Q
YXVzZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisvLyAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFu
YWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQu
Q2FsbEZyYW1lc0RpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgSW5zcGVjdG9y
VGVzdC5sb2coIlBBVVNFICMiICsgKCsrcGF1c2VzKSk7CisgICAgICAgIEluc3BlY3RvclRlc3Qu
bG9nKCIgIFJFQVNPTjogIiArIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VSZWFz
b24pOworICAgICAgICBuZXh0U3RlcCgpOworICAgIH0pOworCisgICAgV2ViSW5zcGVjdG9yLmRl
YnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFn
ZXIuRXZlbnQuUmVzdW1lZCwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgSW5zcGVjdG9yVGVz
dC5sb2coIlJFU1VNRUQiKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIiIpOworICAgICAg
ICBuZXh0U3RlcCgpOworICAgIH0pOworCisgICAgSW5zcGVjdG9yVGVzdC5yZWxvYWRQYWdlKCk7
Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8
cD5UZXN0IHRoYXQgcGF1c2luZyBpbiBkaWZmZXJlbnQgd2F5cyB0cmlnZ2VycyBkaWZmZXJlbnQg
cGF1c2UgcmVhc29ucy48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZGVidWdnZXIvcmVzb3VyY2VzL2JyZWFrLW9uLWV4Y2VwdGlvbnMuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3Jlc291cmNlcy9icmVhay1v
bi1leGNlcHRpb25zLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Rl
YnVnZ2VyL3Jlc291cmNlcy9icmVhay1vbi1leGNlcHRpb25zLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDIgQEAKK3dpbmRvdy5vbmVycm9yID0gZnVuY3Rpb24oZSl7CisgICAgY29uc29s
ZS5sb2coIldpbmRvdy5vbmVycm9yOiAiICsgZSk7Cit9OworCitmdW5jdGlvbiBmb28oYXJyKSB7
CisgICAgdHJ5IHsKKyAgICAgICAgY29uc29sZS5sb2coImZvbzogdHJ5Iik7CisgICAgICAgIGZv
ciAoaSBvZiBhcnIpIHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJmb286IGZvci4uLm9mOiBp
ID0gIiArIGkpOworICAgICAgICAgICAgaWYgKGkgPj0gMSkgeworICAgICAgICAgICAgICAgIGNv
bnNvbGUubG9nKCdmb286IHRocm93ICJUZXN0RXJyb3IiJyk7CisgICAgICAgICAgICAgICAgdGhy
b3cgIlRlc3RFcnJvciI7IC8vIFRocm93IHBvaW50IDEuCisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGNvbnNvbGUubG9nKCJmb286IGNhdGNoICIg
KyBlKTsKKyAgICAgICAgdGhyb3cgZTsgLy8gVGhyb3cgcG9pbnQgMi4KKyAgICB9IGZpbmFsbHkg
eworICAgICAgICBjb25zb2xlLmxvZygiZm9vOiBmaW5hbGx5Iik7CisgICAgfQorICAgIHJldHVy
biA1OworfQorCit2YXIgaW5uZXIgPSBbIDEsIDIsIDMgXTsKK3ZhciBvdXRlciA9IFtbICJrZXki
LCBpbm5lciBdXTsKKworZnVuY3Rpb24gdGVzdEV4Y2VwdGlvbnMoKSB7CisgICAgdmFyIG8gPSBv
dXRlcjsKKyAgICAobmV3IE1hcChvKSkuZm9yRWFjaChmb28pOworfQorCitmdW5jdGlvbiB0ZXN0
UHJvbWlzZXMoKSB7CisgICAgbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZShyZXNvbHZlLCBy
ZWplY3QpIHsKKyAgICAgICAgcmVzb2x2ZShvdXRlcik7CisgICAgfSkudGhlbihmdW5jdGlvbiBw
cm9taXNlVGhlbih4KSB7CisgICAgICAgIGNvbnNvbGUubG9nKCJQcm9taXNlOiB0aGVuIik7Cisg
ICAgICAgIHRlc3RFeGNlcHRpb25zKHgpOworICAgIH0pLmNhdGNoKGZ1bmN0aW9uIHByb21pc2VD
YXRjaChlKSB7CisgICAgICAgIGNvbnNvbGUubG9nKCJQcm9taXNlOiBjYXRjaCAiICsgZSk7Cisg
ICAgICAgIHRocm93IGU7IC8vIFRocm93IHBvaW50IDMuCisgICAgfSk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254233</attachid>
            <date>2015-06-03 20:19:26 -0700</date>
            <delta_ts>2015-06-04 00:37:13 -0700</delta_ts>
            <desc>patch 7: hopefully for real this time.</desc>
            <filename>bug-145525.patch</filename>
            <type>text/plain</type>
            <size>169834</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzMSBA
QAorMjAxNS0wNi0wMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
ZmluYWxseSBibG9ja3Mgc2hvdWxkIG5vdCBzZXQgdGhlIGV4Y2VwdGlvbiBzdGFjayB0cmFjZSB3
aGVuIHJlLXRocm93aW5nIHRoZSBleGNlcHRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBIb3cgZXhjZXB0aW9ucyBwcmVzZW50bHkgd29yazoKKyAg
ICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgMS4gb3BfdGhyb3cg
Y2FuIHRocm93IGFueSBKU1ZhbHVlLgorICAgICAgICAyLiB0aGUgVk0gdHJpZXMgdG8gY2FwdHVy
ZSB0aGUgc3RhY2sgYXQgdGhlIHRocm93IHBvaW50IGFuZCBwcm9wYWdhdGUgdGhhdCBhcyBuZWVk
ZWQuCisgICAgICAgIDMuIGZpbmFsbHkgYmxvY2tzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBvcF9j
YXRjaCB0byBjYXRjaCB0aGUgdGhyb3duIHZhbHVlLCBhbmQgdGhyb3dzIGl0IGFnYWluIHVzaW5n
IG9wX3Rocm93LgorCisgICAgICAgIFdoYXTigJlzIHdyb25nIHdpdGggaG93IGl0IHByZXNlbnRs
eSB3b3JrczoKKyAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQorICAgICAgICAxLiBmaW5hbGx54oCZcyBtYWtlcyBmb3IgYmFkIGV4Y2VwdGlvbiB0aHJvdyBs
aW5lIG51bWJlcnMgaW4gdGhlIEluc3BlY3RvciBjb25zb2xlLgorCisgICAgICAgICAgIFRoZSBv
cF90aHJvdyBpbiBmaW5hbGx5IHdpbGwgdGhyb3cgdGhlIHZhbHVlIGFuZXcgaS5lLiBpdCBjYXB0
dXJlcyBhIHN0YWNrIGZyb20gdGhlIHJlLXRocm93IHBvaW50LgorICAgICAgICAgICBBcyBhIHJl
c3VsdCwgdGhlIEluc3BlY3RvciBzZWVzIHRoZSBmaW5hbGx5IGJsb2NrIGFzIHRoZSB0aHJvdyBw
b2ludC4gIFRoZSBvcmlnaW5hbCBzdGFjayBpcyBsb3N0LgorCisgICAgICAgIDIuIGZpbmFsbHni
gJlzIGJyZWFrcyB0aGUgSW5zcGVjdG9y4oCZcyDigJxCcmVha3Mgb24gVW5jYXVnaHQgRXhjZXB0
aW9u4oCdCisKKyAgICAgICAgICAgVGhpcyBpcyBiZWNhdXNlIGZpbmFsbHkgYmxvY2tzIGFyZSBp
bmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGNhdGNoIGJsb2Nrcy4gIEFzIGEgcmVzdWx0LCBhIHRyeS1m
aW5hbGx5LAorICAgICAgICAgICB3aGljaCBzaG91bGQgYnJlYWsgaW4gdGhlIEluc3BlY3RvciBv
biB0aGUgdGhyb3csIGRvZXMgbm90IGJlY2F1c2UgdGhlIEluc3BlY3RvciB0aG91Z2h0IHRoZQor
ICAgICAgICAgICBleGNlcHRpb24gd2FzIOKAnGNhdWdodOKAnS4KKworICAgICAgICAzLiBmaW5h
bGx54oCZcyB5aWVsZHMgY29uZnVzaW5nIGJyZWFrIHBvaW50cyB3aGVuIHRoZSBJbnNwZWN0b3Ig
4oCcQnJlYWtzIG9uIEFsbCBFeGNlcHRpb25z4oCdCisKKyAgICAgICAgICAgYS4gSW4gYSB0cnkt
ZmluYWxseSBzY2VuYXJpbywgdGhlIEluc3BlY3RvciBicmVha3MgMiB0aW1lczogMSBhdCB0aGUg
dGhyb3csIDEgYXQgdGhlIGZpbmFsbHkuCisgICAgICAgICAgIGIuIEluIGEgZm9yLW9mIGxvb3Ag
KHdoaWNoIGhhcyBzeW50aGVzaXplZCBmaW5hbGx5cyksIHRoZSBJbnNwZWN0b3Igd2lsbCBkbyBh
bm90aGVyIGJyZWFrLgorICAgICAgICAgICAgICBTaW1pbGFybHkgZm9yIG90aGVyIGNhc2VzIG9m
IEpTIGNvZGUgd2hpY2ggc3ludGhlc2l6ZSBmaW5hbGx5cy4KKyAgICAgICAgICAgYy4gQXQgVk0g
cmUtZW50cnkgYm91bmRhcmllcyAoZS5nLiBqcyB0aHJvd3MgJiByZXR1cm5zIHRvIG5hdGl2ZSBj
b2RlLCB3aGljaCByZXR1cm5zIHRvIGpzKSwKKyAgICAgICAgICAgICAgdGhlIEluc3BlY3RvciB3
aWxsIGRvIGFub3RoZXIgYnJlYWsgaWYgdGhlcmXigJlzIGFuIHVuY2F1Z2h0IGV4Y2VwdGlvbi4K
KworICAgICAgICBIb3cgdGhpcyBwYXRjaCBmaXhlcyB0aGUgaXNzdWVzOgorICAgICAgICA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIDEuIFdlIGludHJvZHVjZSBhbiBF
eGNlcHRpb24gb2JqZWN0IHRoYXQgd3JhcHMgdGhlIHRocm93biB2YWx1ZSBhbmQgdGhlIGV4Y2Vw
dGlvbiBzdGFjay4KKworICAgICAgICAgICBXaGVuIHRocm93aW5nIGFuIGV4Y2VwdGlvbiwgdGhl
IFZNIHdpbGwgY2hlY2sgaWYgdGhlIHRocm93biB2YWx1ZSBpcyBhbiBFeGNlcHRpb24KKyAgICAg
ICAgICAgb2JqZWN0IG9yIG5vdC4gIElmIGl0IGlzIG5vdCBhbiBFeGNlcHRpb24gb2JqZWN0LCB0
aGVuIHdlIG11c3QgYmUgdGhyb3duIGEgbmV3CisgICAgICAgICAgIGV4Y2VwdGlvbi4gIFRoZSBW
TSB3aWxsIGNyZWF0ZSBhbiBFeGNlcHRpb24gb2JqZWN0IHRvIHdyYXAgdGhlIHRocm93biB2YWx1
ZSBhbmQKKyAgICAgICAgICAgY2FwdHVyZSB0aGUgY3VycmVudCBzdGFjayBmb3IgaXQuCisKKyAg
ICAgICAgICAgSWYgdGhlIHRocm93biB2YWx1ZSBpcyBhbHJlYWR5IGFuIEV4Y2VwdGlvbiBvYmpl
Y3QsIHRoZW4gdGhlIHJlcXVlc3RlZCB0aHJvdyBvcGVyYXRpb24KKyAgICAgICAgICAgbXVzdCBi
ZSBhIHJlLXRocm93LiAgVGhlIFZNIHdpbGwgbm90IGNhcHR1cmUgYSBuZXcgc3RhY2sgZm9yIGl0
LgorCisgICAgICAgIDIuIG9wX2NhdGNoIHdpbGwgbm93IHBvcHVsYXRlIDIgbG9jYWxzOiAxIGZv
ciB0aGUgRXhjZXB0aW9uLCAxIGZvciB0aGUgdGhyb3duIEpTVmFsdWUuCisKKyAgICAgICAgICAg
VGhlIFZNIGlzIGF3YXJlIG9mIHRoZSBFeGNlcHRpb24gb2JqZWN0IGFuZCB1c2VzIGl0IGZvciBy
ZXRocm93cyBpbiBmaW5hbGx5IGJsb2Nrcy4KKyAgICAgICAgICAgSlMgc291cmNlIGNvZGUgaXMg
bmV2ZXIgYXdhcmUgb2YgdGhlIEV4Y2VwdGlvbiBvYmplY3QuCisKKyAgICAgICAgICAgSlMgY29k
ZSBpcyBhd2FyZSBvZiB0aGUgdGhyb3duIHZhbHVlLiAgSWYgaXQgdGhyb3dzIHRoZSBjYXVnaHQg
dGhyb3duIHZhbHVlLCB0aGF0CisgICAgICAgICAgIGNvbnN0aXR1dGVzIGEgbmV3IHRocm93LCBh
bmQgYSBuZXcgRXhjZXB0aW9uIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQgZm9yIGl0LgorCisgICAg
ICAgIDMuIFRoZSBWTSBubyBsb25nZXIgdHJhY2tzIHRoZSB0aHJvd24gSlNWYWx1ZSBhbmQgdGhl
IGV4Y2VwdGlvbiBzdGFjay4gIEl0IHdpbGwgb25seQorICAgICAgICAgICB0cmFjayBhIG1fZXhj
ZXB0aW9uIGZpZWxkIHdoaWNoIGlzIGFuIEV4Y2VwdGlvbiouCisKKyAgICAgICAgNC4gVGhlIEJ5
dGVjb2RlR2VuZXJhdG9yIGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCBpbiBhIHByaW9yIHBhdGNo
IHRvIGRpc3Rpbmd1aXNoCisgICAgICAgICAgIGJldHdlZW4gQ2F0Y2gsIEZpbmFsbHksIGFuZCBT
eW50aGVzaXplZEZpbmFsbHkgYmxvY2tzLiAgVGhlIGludGVycHJldGVyIHJ1bnRpbWUgd2lsbAor
ICAgICAgICAgICBub3cgcmVwb3J0IHRvIHRoZSBkZWJ1Z2dlciB3aGV0aGVyIHdlIGhhdmUgYSBD
YXRjaCBoYW5kbGVyLCBub3QganVzdCBhbnkgaGFuZGxlcnMuCisKKyAgICAgICAgICAgVGhlIGRl
YnVnZ2VyIHdpbGwgdXNlIHRoaXMgZGV0YWlsIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGJyZWFr
IG9yIG5vdC4gICJCcmVhayBvbgorICAgICAgICAgICB1bmNhdWdodCBleGNlcHRpb25zIiB3aWxs
IG9ubHkgYnJlYWsgaWYgbm8gQ2F0Y2ggaGFuZGxlciB3YXMgZm91bmQuCisKKyAgICAgICAgICAg
VGhpcyBzb2x2ZXMgdGhlIGlzc3VlIG9mIHRoZSBkZWJ1Z2dlciBicmVha2luZyBhdCBmaW5hbGx5
IGJsb2NrcywgYW5kIGZvci1vZiBzdGF0ZW1lbnRzLgorCisgICAgICAgIDUuIFRoZSBFeGNlcHRp
b24gb2JqZWN0IHdpbGwgYWxzbyBoYXZlIGEgZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBk
ZWJ1Z2dlciBoYXMgYmVlbgorICAgICAgICAgICBub3RpZmllZCBvZiB0aGUgRXhjZXB0aW9uIGJl
aW5nIHRocm93bi4gIE9uY2UgdGhlIEludGVycHJldGVyIG5vdGlmaWVzIHRoZSBkZWJ1Z2dlcgor
ICAgICAgICAgICBvZiB0aGUgRXhjZXB0aW9uIG9iamVjdCwgaXQgd2lsbCBtYXJrIHRoaXMgZmxh
ZyBhbmQgbm90IHJlcGVhdCB0aGUgbm90aWZ5IHRoZSBkZWJ1Z2dlcgorICAgICAgICAgICBhZ2Fp
biBvZiB0aGUgc2FtZSBFeGNlcHRpb24uCisKKyAgICAgICAgICAgVGhpcyBzb2x2ZXMgdGhlIGlz
c3VlIG9mIHRoZSBkZWJ1Z2dlciBicmVha2luZyBhdCBWTSByZS1lbnRyeSBwb2ludHMgZHVlIHRv
IHVuY2F1Z2h0CisgICAgICAgICAgIGV4Y2VwdGlvbnMuCisKKyAgICAgICAgNi4gVGhlIGxpZmUt
Y3ljbGUgb2YgdGhlIGNhcHR1cmVkIGV4Y2VwdGlvbiBzdGFjayB0cmFjZSB3aWxsIG5vdyBmb2xs
b3cgdGhlIGxpZmUtY3ljbGUKKyAgICAgICAgICAgb2YgdGhlIEV4Y2VwdGlvbiBvYmplY3QuCisK
KyAgICAgICAgT3RoZXIgY2hhbmdlczoKKyAgICAgICAgNy4gQ2hhbmdlIGFsbCBjbGllbnRzIG9m
IHRoZSBWTTo6ZXhjZXB0aW9uKCkgdG8gZXhwZWN0IGFuIEV4Y2VwdGlvbiogaW5zdGVhZCBvZiBK
U1ZhbHVlLgorCisgICAgICAgIDguIEZpeGVkIGEgZmV3IGJ1Z3Mgd2hlcmUgdGhyb3duIGV4Y2Vw
dGlvbnMgYXJlIG5vdCBjbGVhcmVkIGJlZm9yZSBleGl0aW5nIHRoZSBWTS4KKworICAgICAgICA5
LiBBbHNvIHJlbmFtZWQgc29tZSB2YXJpYWJsZXMgYW5kIGNsYXNzZXMgdG8gYmV0dGVyIGRlc2Ny
aWJlIHdoYXQgdGhleSBhcmUuCisKKyAgICAgICAgKiBBUEkvSlNCYXNlLmNwcDoKKyAgICAgICAg
KEpTRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAoSlNDaGVja1NjcmlwdFN5bnRheCk6CisKKyAg
ICAgICAgKiBBUEkvSlNPYmplY3RSZWYuY3BwOgorICAgICAgICAoaGFuZGxlRXhjZXB0aW9uSWZO
ZWVkZWQpOgorICAgICAgICAtIFRoZSBmdW5jdGlvbnMgYmVsb3cgYWxsIGRvIHRoZSBzYW1lIGV4
Y2VwdGlvbiBjaGVjay4gIEFkZGVkIHRoaXMgaGVscGVyCisgICAgICAgICAgdG8gc2ltcGxpZnkg
dGhlIGNvZGUuCisgICAgICAgIChKU0NsYXNzQ3JlYXRlKToKKyAgICAgICAgKEpTT2JqZWN0TWFr
ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTT2JqZWN0TWFrZUFycmF5KToKKyAgICAgICAgKEpTT2Jq
ZWN0TWFrZURhdGUpOgorICAgICAgICAoSlNPYmplY3RNYWtlRXJyb3IpOgorICAgICAgICAoSlNP
YmplY3RNYWtlUmVnRXhwKToKKyAgICAgICAgKEpTT2JqZWN0R2V0UHJvcGVydHkpOgorICAgICAg
ICAoSlNPYmplY3RTZXRQcm9wZXJ0eSk6CisgICAgICAgIChKU09iamVjdEdldFByb3BlcnR5QXRJ
bmRleCk6CisgICAgICAgIChKU09iamVjdFNldFByb3BlcnR5QXRJbmRleCk6CisgICAgICAgIChK
U09iamVjdERlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24p
OgorICAgICAgICAoSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3Rvcik6CisKKyAgICAgICAgKiBBUEkv
SlNTY3JpcHRSZWYuY3BwOgorICAgICAgICAqIEFQSS9KU1ZhbHVlLm1tOgorICAgICAgICAoSlND
b250YWluZXJDb252ZXJ0b3I6OnRha2UpOgorICAgICAgICAocmVwb3J0RXhjZXB0aW9uVG9JbnNw
ZWN0b3IpOgorCisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoaGFuZGxl
RXhjZXB0aW9uSWZOZWVkZWQpOgorICAgICAgICAtIFRoZSBmdW5jdGlvbnMgYmVsb3cgYWxsIGRv
IHRoZSBzYW1lIGV4Y2VwdGlvbiBjaGVjay4gIEFkZGVkIHRoaXMgaGVscGVyCisgICAgICAgICAg
dG8gc2ltcGxpZnkgdGhlIGNvZGUuCisgICAgICAgIChldmVybm90ZUhhY2tOZWVkZWQpOgorICAg
ICAgICAoSlNWYWx1ZUlzRXF1YWwpOgorICAgICAgICAoSlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0
cnVjdG9yKToKKyAgICAgICAgKEpTVmFsdWVDcmVhdGVKU09OU3RyaW5nKToKKyAgICAgICAgKEpT
VmFsdWVUb051bWJlcik6CisgICAgICAgIChKU1ZhbHVlVG9TdHJpbmdDb3B5KToKKyAgICAgICAg
KEpTVmFsdWVUb09iamVjdCk6CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgLSBBZGRlZCBuZXcgZmlsZXMgRXhjZXB0aW9uLmggYW5kIEV4Y2VwdGlvbi5jcHAuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwOgorICAgICAgICAoRGVw
cmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9T
Y3JpcHRGdW5jdGlvbkNhbGwuaDoKKworICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5q
c29uOgorICAgICAgICAtIG9wX2NhdGNoIG5vdyBoYWQgMiBvcGVyYW5kczogdGhlIGV4Y2VwdGlv
biByZWdpc3RlciwgYW5kIHRoZSB0aHJvd24gdmFsdWUgcmVnaXN0ZXIuCisKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5
dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suaDoKKyAgICAgICAgLSBoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoKSBub3cgY2FuIGxvb2sg
Zm9yIGp1c3QgQ2F0Y2ggaGFuZGxlcnMgb25seS4KKworICAgICAgICAqIGJ5dGVjb2RlL0hhbmRs
ZXJJbmZvLmg6CisgICAgICAgIC0gQ2xlYW5lZCB1cCBzb21lIHdoaXRlIHNwYWNlIEkgYWNjaWRl
bnRhbGx5IGFkZGVkIGluIGEgcHJldmlvdXMgcGF0Y2guCisKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6cHVzaFRyeSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BUcnlBbmRF
bWl0Q2F0Y2gpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRocm93UmVm
ZXJlbmNlRXJyb3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1l
cmF0aW9uKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUaHJvdyk6CisgICAgICAgICogYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlRyeU5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgIC0gQWRkaW5nIHN1cHBvcnQgZm9yIG9wX2NhdGNoJ3MgMiBvcGVy
YW5kcy4KKworICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpTQzo6
RGVidWdnZXI6Omhhc0JyZWFrcG9pbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6cGF1c2VJ
Zk5lZWRlZCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpleGNlcHRpb24pOgorICAgICAgICAq
IGRlYnVnZ2VyL0RlYnVnZ2VyLmg6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJh
bWUuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6dGhpc1ZhbHVlKToKKyAg
ICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBkZWJ1
Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFt
ZTo6aXNWYWxpZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5j
cHA6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYXRlSW5q
ZWN0ZWRTY3JpcHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9ubWVudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xs
ZXI6OmFwcGVuZEFQSUJhY2t0cmFjZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVwb3J0QVBJRXhjZXB0aW9uKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICog
aW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0ph
dmFTY3JpcHRDYWxsRnJhbWUuaDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SmF2YVNjcmlwdENhbGxG
cmFtZTo6dm1FbnRyeUdsb2JhbE9iamVjdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkphdmFTY3Jp
cHRDYWxsRnJhbWU6OnRoaXNWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkphdmFTY3JpcHRD
YWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNr
RmFjdG9yeS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmV4dHJhY3RTb3VyY2VJbmZvcm1hdGlv
bkZyb21FeGNlcHRpb24pOgorICAgICAgICAoSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRDYWxsU3Rh
Y2tGcm9tRXhjZXB0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFj
dG9yeS5oOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAg
ICAgIChJbnNwZWN0b3I6OlNjcmlwdERlYnVnU2VydmVyOjpldmFsdWF0ZUJyZWFrcG9pbnRBY3Rp
b24pOgorICAgICAgICAoSW5zcGVjdG9yOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlQnJlYWtw
b2ludEhpdCk6CisgICAgICAgIChJbnNwZWN0b3I6OlNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVF
eGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9TY3Jp
cHREZWJ1Z1NlcnZlci5oOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAg
ICAgICAoSlNDOjpFeGVjU3RhdGU6OmNsZWFyRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6RXhl
Y1N0YXRlOjpleGNlcHRpb24pOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmhhZEV4Y2VwdGlv
bik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6YXRvbWljU3RyaW5nVGFibGUpOgorICAgICAg
ICAoSlNDOjpFeGVjU3RhdGU6OnByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpFeGVjU3Rh
dGU6OmNsZWFyU3VwcGxlbWVudGFyeUV4Y2VwdGlvbkluZm8pOiBEZWxldGVkLgorCisgICAgICAg
ICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjp1bndpbmRDYWxs
RnJhbWUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6c3RhY2tUcmFjZUFzU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6R2V0Q2F0Y2hIYW5kbGVyRnVuY3Rvcjo6R2V0Q2F0Y2hIYW5kbGVyRnVu
Y3Rvcik6CisgICAgICAgIChKU0M6OkdldENhdGNoSGFuZGxlckZ1bmN0b3I6Om9wZXJhdG9yKCkp
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5kKToKKyAgICAgICAgLSBBZGRlZCBh
IGNoZWNrIGZvciBkaWROb3RpZnlJbnNwZWN0b3JPZlRocm93KCkgaGVyZSB0byBwcmV2ZW50IGR1
cGxpY2F0ZSByZXBvcnRzCisgICAgICAgICAgb2YgdGhlIHNhbWUgRXhjZXB0aW9uIHRvIHRoZSBk
ZWJ1Z2dlci4KKworICAgICAgICAoSlNDOjpHZXRFeGNlcHRpb25IYW5kbGVyRnVuY3Rvcjo6R2V0
RXhjZXB0aW9uSGFuZGxlckZ1bmN0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRFeGNl
cHRpb25IYW5kbGVyRnVuY3Rvcjo6b3BlcmF0b3IoKSk6IERlbGV0ZWQuCisgICAgICAgIC0gUmVu
YW1lZCBHZXRFeGNlcHRpb25IYW5kbGVyRnVuY3RvciB0byBHZXRDYXRjaEhhbmRsZXJGdW5jdG9y
IHNpbmNlIHRoZSBkZWJ1Z2dlcgorICAgICAgICAgIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiBrbm93
aW5nIHdoZXRoZXIgd2UgaGF2ZSBDYXRjaCBoYW5kbGVycy4KKworICAgICAgICAqIGludGVycHJl
dGVyL0ludGVycHJldGVyLmg6CisgICAgICAgIChKU0M6OlN1c3BlbmRFeGNlcHRpb25TY29wZTo6
U3VzcGVuZEV4Y2VwdGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6U3VzcGVuZEV4Y2VwdGlvblNj
b3BlOjp+U3VzcGVuZEV4Y2VwdGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OnNhbXBsZXIpOgorICAgICAgICAoSlNDOjpDbGVhckV4Y2VwdGlvblNjb3BlOjpDbGVhckV4Y2Vw
dGlvblNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2xlYXJFeGNlcHRpb25TY29wZTo6
fkNsZWFyRXhjZXB0aW9uU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAtIFJlbmFtZWQgQ2xlYXJF
eGNlcHRpb25TY29wZSB0byBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgYmVjYXVzZSAiY2xlYXIiIGlt
cGxpZXMgdGhhdAorICAgICAgICAgIHdlJ3JlIHB1cmdpbmcgdGhlIGV4Y2VwdGlvbi4gIEluc3Rl
YWQsIHdlJ3JlIG1lcmVseSBzdXNwZW5kaW5nIGFueSBoYW5kbGluZyBvZgorICAgICAgICAgIHRo
YXQgZXhjZXB0aW9uIGZvciBhIHBlcmlvZCBkZWZpbmVkIGJ5IHRoZSBzY29wZS4KKworICAgICAg
ICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmVtaXRFeGNlcHRpb25DaGVjayk6CisKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5j
cHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAtIFJlbW92ZWQgdGhl
IGV4Y2VwdGlvbiBhcmd1bWVudC4gIEl0IGlzIGFsd2F5cyB0aGUgdmFsdWUgaW4gVk06OmV4Y2Vw
dGlvbigpIGFueXdheS4KKyAgICAgICAgICBnZW5lcmljVW53aW5kKCkgY2FuIGp1c3QgZ2V0IGl0
IGZyb20gdGhlIFZNLCBhbmQgc2F2ZSBldmVyeW9uZSBzb21lIHdvcmsuCisKKyAgICAgICAgKiBq
aXQvSklURXhjZXB0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAtIEFkZCBzdXBw
b3J0IGZvciB0aGUgbmV3IG9wX2NhdGNoIG9wZXJhbmRzLgorCisgICAgICAgICogaml0L0pJVE9w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAg
ICAoSlNDOjpuYXRpdmVGb3JHZW5lcmF0b3IpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAg
IChmdW5jdGlvblJ1bik6CisgICAgICAgIChmdW5jdGlvbkxvYWQpOgorICAgICAgICAocnVuV2l0
aFNjcmlwdHMpOgorICAgICAgICAocnVuSW50ZXJhY3RpdmUpOgorICAgICAgICAqIGxsaW50L0xM
SW50T2Zmc2V0c0V4dHJhY3Rvci5jcHA6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorCisgICAg
ICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAtIEFkZCBzdXBwb3J0IGZvciB0
aGUgbmV3IG9wX2NhdGNoIG9wZXJhbmRzLiAgQWxzbyB1cGRhdGUgdGhlIGNvZGUgdG8gaGFuZGxl
CisgICAgICAgICAgVk06Om1fZXhjZXB0aW9uIGJlaW5nIGFuIEV4Y2VwdGlvbiBwb2ludGVyLCBu
b3QgYSBKU1ZhbHVlLgorCisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAg
ICAgICAgKEpTQzo6VHJ5Tm9kZTo6VHJ5Tm9kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6
CisgICAgICAgICogcnVudGltZS9DYWxsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OmNhbGwpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ2FsbERhdGEuaDoKKworICAgICAgICAqIHJ1bnRpbWUvQ29tcGxl
dGlvbi5jcHA6CisgICAgICAgIChKU0M6OmV2YWx1YXRlKToKKyAgICAgICAgKiBydW50aW1lL0Nv
bXBsZXRpb24uaDoKKyAgICAgICAgKEpTQzo6ZXZhbHVhdGUpOgorICAgICAgICAtIENoYW5nZSBl
dmFsdWF0ZSgpIHRvIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlIHJldHVybmVkIGV4Y2VwdGlvbiB2
YWx1ZSBpbnN0ZWFkCisgICAgICAgICAgb2YgYSBwb2ludGVyLiAgSW4gYWxsIGJ1dCAyIG9yIDMg
Y2FzZXMsIHdlIHdhbnQgdGhlIHJldHVybmVkIGV4Y2VwdGlvbiBhbnl3YXkuCisgICAgICAgICAg
TWlnaHQgYXMgd2VsbCBzaW1wbGlmeSB0aGUgY29kZSBieSByZXF1aXJpbmcgdGhlIHJlZmVyZW5j
ZS4KKworICAgICAgICAqIHJ1bnRpbWUvRXJyb3IuaDoKKyAgICAgICAgKEpTQzo6dGhyb3dWTUVy
cm9yKToKKyAgICAgICAgKEpTQzo6dGhyb3dWTVR5cGVFcnJvcik6CisKKyAgICAgICAgKiBydW50
aW1lL0V4Y2VwdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpFeGNlcHRpb246OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OkV4Y2VwdGlvbjo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkV4
Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RXhjZXB0aW9uOjp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6RXhjZXB0aW9uOjpFeGNlcHRpb24pOgorICAgICAg
ICAoSlNDOjpFeGNlcHRpb246On5FeGNlcHRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0
aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpFeGNlcHRpb246OnZhbHVlT2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6RXhjZXB0aW9uOjpjYXN0KToKKyAgICAgICAgKEpTQzo6RXhjZXB0aW9uOjp2
YWx1ZSk6CisgICAgICAgIChKU0M6OkV4Y2VwdGlvbjo6c3RhY2spOgorICAgICAgICAoSlNDOjpF
eGNlcHRpb246OmRpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3cpOgorICAgICAgICAoSlNDOjpFeGNl
cHRpb246OnNldERpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3cpOgorCisgICAgICAgICogcnVudGlt
ZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlVGVybWluYXRlZEV4
ZWN1dGlvbkV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OmlzVGVybWluYXRlZEV4ZWN1dGlvbkV4
Y2VwdGlvbik6CisgICAgICAgIChKU0M6OmNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcik6CisgICAg
ICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg6CisgICAgICAgICogcnVudGltZS9HZXR0
ZXJTZXR0ZXIuY3BwOgorICAgICAgICAoSlNDOjpjYWxsR2V0dGVyKToKKyAgICAgICAgKiBydW50
aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yQ2xvc2Up
OgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNQ
cm9taXNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RQcm9taXNlKToK
KyAgICAgICAgKiBydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcDoKKyAgICAgICAgKEpTQzo6
dXBkYXRlRGVmZXJyZWRGcm9tUG90ZW50aWFsVGhlbmFibGUpOgorICAgICAgICAoSlNDOjphYnJ1
cHRSZWplY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlUmVhY3Rpb24uY3BwOgor
ICAgICAgICAoSlNDOjpFeGVjdXRlUHJvbWlzZVJlYWN0aW9uTWljcm90YXNrOjpydW4pOgorCisg
ICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAg
IChKU0M6OlZNOjpyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6OlZNOjp0
aHJvd0V4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OlZNOjpzZXRTdGFja1BvaW50ZXJBdFZNRW50
cnkpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0RXhjZXB0aW9uSW5mbyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlZNOjpzZXRFeGNlcHRpb25JbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Vk06OmNsZWFyRXhjZXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Y2xlYXJFeGNlcHRp
b25TdGFjayk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlND
OjpWTTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dPZmZzZXQpOgorICAgICAgICAoSlNDOjpWTTo6
Y2xlYXJFeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpWTTo6c2V0RXhjZXB0aW9uKToKKyAgICAg
ICAgKEpTQzo6Vk06OmV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OlZNOjphZGRyZXNzT2ZFeGNl
cHRpb24pOgorICAgICAgICAoSlNDOjpWTTo6ZXhjZXB0aW9uU3RhY2spOiBEZWxldGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1FbnRyeVNj
b3BlOjpWTUVudHJ5U2NvcGUpOgorICAgICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6OnNldEVudHJ5
U2NvcGVEaWRQb3BMaXN0ZW5lcik6CisKIDIwMTUtMDYtMDEgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBDYWxsTGlua1N0YXR1cyBzaG91bGQgcmV0dXJuIHRha2Vz
U2xvd1BhdGggaWYgdGhlIEdDIG9mdGVuIGNsZWFyZWQgdGhlIElDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQ1NCw2ICs0NTQsNyBA
QCBzZXQoSmF2YVNjcmlwdENvcmVfUlVOVElNRV9TT1VSQ0VTCiAgICAgcnVudGltZS9FcnJvckhh
bmRsaW5nU2NvcGUuY3BwCiAgICAgcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAogICAgIHJ1bnRp
bWUvRXJyb3JQcm90b3R5cGUuY3BwCisgICAgcnVudGltZS9FeGNlcHRpb24uY3BwCiAgICAgcnVu
dGltZS9FeGNlcHRpb25GdXp6LmNwcAogICAgIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAK
ICAgICBydW50aW1lL0V4ZWN1dGFibGUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2
aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCiAjaW5jbHVk
ZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1
ZGUgIkhlYXBTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgpA
QCAtODk5LDEzICs5MDAsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blJ1bgogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KAogICAgICAgICBleGVjLT52bSgpLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAiYXJndW1l
bnRzIiksIGFycmF5KTsKIAotICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIEV4Y2VwdGlvbiog
ZXhjZXB0aW9uOwogICAgIFN0b3BXYXRjaCBzdG9wV2F0Y2g7CiAgICAgc3RvcFdhdGNoLnN0YXJ0
KCk7Ci0gICAgZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShz
Y3JpcHQuZGF0YSgpLCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgJmV4Y2VwdGlvbik7CisgICAgZXZh
bHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQuZGF0YSgp
LCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgZXhjZXB0aW9uKTsKICAgICBzdG9wV2F0Y2guc3RvcCgp
OwogCi0gICAgaWYgKCEhZXhjZXB0aW9uKSB7CisgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAg
ICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBl
eGNlcHRpb24pOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIH0KQEAgLTkyMiw4ICs5MjMsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uTG9hCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIAotICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2Vw
dGlvbjsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksICZl
dmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBFeGNlcHRpb24qIGV2YWx1YXRpb25FeGNlcHRpb247
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSwganNjU291cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCBldmFsdWF0
aW9uRXhjZXB0aW9uKTsKICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC0xMjg1LDE1ICsxMjg2LDE1IEBAIHN0
YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKIAogICAgICAgICB2bS5zdGFy
dFNhbXBsaW5nKCk7CiAKLSAgICAgICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAg
ICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXZhbHVhdGlv
bkV4Y2VwdGlvbik7CisgICAgICAgIEV4Y2VwdGlvbiogZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAg
ICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgZXZhbHVhdGlv
bkV4Y2VwdGlvbik7CiAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmICFldmFsdWF0aW9uRXhj
ZXB0aW9uOwogICAgICAgICBpZiAoZHVtcCAmJiAhZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAg
ICAgICAgIHByaW50ZigiRW5kOiAlc1xuIiwgcmV0dXJuVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRm
OCgpLmRhdGEoKSk7CiAgICAgICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKSB7Ci0gICAgICAg
ICAgICBwcmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGV2YWx1YXRpb25FeGNlcHRpb24udG9TdHJp
bmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjog
JXNcbiIsIGV2YWx1YXRpb25FeGNlcHRpb24tPnZhbHVlKCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgp
LmRhdGEoKSk7CiAgICAgICAgICAgICBJZGVudGlmaWVyIHN0YWNrSUQgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAic3RhY2siKTsKLSAgICAgICAg
ICAgIEpTVmFsdWUgc3RhY2tWYWx1ZSA9IGV2YWx1YXRpb25FeGNlcHRpb24uZ2V0KGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBzdGFja0lEKTsKKyAgICAgICAgICAgIEpTVmFsdWUgc3RhY2tW
YWx1ZSA9IGV2YWx1YXRpb25FeGNlcHRpb24tPnZhbHVlKCkuZ2V0KGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpLCBzdGFja0lEKTsKICAgICAgICAgICAgIGlmICghc3RhY2tWYWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHN0YWNrVmFsdWUu
dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIH0KQEAgLTEzNDksOCArMTM1
MCw4IEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKLSAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKHNvdXJjZSwgaW50ZXJwcmV0ZXJOYW1lKSwgSlNWYWx1
ZSgpLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgICAgIEV4Y2VwdGlvbiogZXZhbHVhdGlv
bkV4Y2VwdGlvbjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKHNvdXJjZSwgaW50ZXJwcmV0ZXJOYW1l
KSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbHNlCiAgICAgICAgIHByaW50
ZigiJXMiLCBpbnRlcmFjdGl2ZVByb21wdCk7CiAgICAgICAgIFZlY3RvcjxjaGFyLCAyNTY+IGxp
bmU7CkBAIC0xMzY1LDExICsxMzY2LDExIEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZlKEds
b2JhbE9iamVjdCoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBsaW5lLmFwcGVuZCgnXDAn
KTsKIAotICAgICAgICBKU1ZhbHVlIGV2YWx1YXRpb25FeGNlcHRpb247Ci0gICAgICAgIEpTVmFs
dWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNj
U291cmNlKGxpbmUuZGF0YSgpLCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0
aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgRXhjZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOwor
ICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksIGpzY1NvdXJjZShsaW5lLmRhdGEoKSwgaW50ZXJwcmV0ZXJOYW1lKSwgSlNWYWx1
ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbmRpZgogICAgICAgICBpZiAoZXZhbHVhdGlv
bkV4Y2VwdGlvbikKLSAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVh
dGlvbkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVl
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
IHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS50
b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
cHJpbnRmKCIlc1xuIiwgcmV0dXJuVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHJldmlzaW9uIDE4NTE4
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNsdWRlICJDYWxs
RnJhbWUuaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgi
CiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRo
cmVhZGluZy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCkBAIC02MywxMiArNjQsMTIg
QEAgSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZgogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCk7CiAgICAg
U291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291cmNlKHNjcmlwdC0+c3RyaW5nKCksIHNvdXJjZVVS
TCA/IHNvdXJjZVVSTC0+c3RyaW5nKCkgOiBTdHJpbmcoKSwgVGV4dFBvc2l0aW9uKE9yZGluYWxO
dW1iZXI6OmZyb21PbmVCYXNlZEludChzdGFydGluZ0xpbmVOdW1iZXIpLCBPcmRpbmFsTnVtYmVy
OjpmaXJzdCgpKSk7CiAKLSAgICBKU1ZhbHVlIGV2YWx1YXRpb25FeGNlcHRpb247Ci0gICAgSlNW
YWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBz
b3VyY2UsIGpzVGhpc09iamVjdCwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEV4Y2VwdGlv
biogZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVh
dGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHNvdXJjZSwganNUaGlzT2JqZWN0LCBldmFs
dWF0aW9uRXhjZXB0aW9uKTsKIAogICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKSB7CiAgICAg
ICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywg
ZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhl
YywgZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKSk7CiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCiAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBoYXZlIGEgZGVidWdnZXIgYXR0YWNoZWQg
d2UgY291bGQgbGVhcm4gYWJvdXQgUGFyc2VFcnJvciBleGNlcHRpb25zIHRocm91Z2gKICAgICAg
ICAgLy8gU2NyaXB0RGVidWdTZXJ2ZXI6OnNvdXJjZVBhcnNlZCBhbmQgdGhpcyBwYXRoIGNvdWxk
IHByb2R1Y2UgYSBkdXBsaWNhdGUgd2FybmluZy4gVGhlCkBAIC0xMDcsNyArMTA4LDggQEAgYm9v
bCBKU0NoZWNrU2NyaXB0U3ludGF4KEpTQ29udGV4dFJlZiBjdAogICAgICAgICBpZiAoZXhjZXB0
aW9uKQogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIHN5bnRheEV4Y2VwdGlv
bik7CiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlH
bG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihl
eGVjLCBzeW50YXhFeGNlcHRpb24pOworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IEV4
Y2VwdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN5bnRheEV4Y2VwdGlvbik7CisgICAgICAgIGV4
ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQ
SUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNw
cAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVj
dFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDb3Bp
ZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJEYXRlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJFcnJvckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAi
RnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRl
ICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCkBAIC02MSw2ICs2MiwyMSBAQAogCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCitzdGF0aWMgYm9vbCBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWVSZWYqIHJldHVybmVkRXhjZXB0aW9uUmVmKQoreworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGV4
ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb25SZWYpCisgICAg
ICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb25SZWYgPSB0b1JlZihleGVjLCBleGNlcHRpb24tPnZh
bHVlKCkpOworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQorICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKKyNl
bmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CiBKU0NsYXNzUmVmIEpTQ2xhc3NDcmVhdGUoY29uc3QgSlNDbGFzc0RlZmluaXRpb24qIGRlZmlu
aXRpb24pCiB7CiAgICAgaW5pdGlhbGl6ZVRocmVhZGluZygpOwpAQCAtMTQ4LDE2ICsxNjQsOCBA
QCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VGdW5jdGlvbihKU0NvbnRlCiAgICAgYXJncy5hcHBl
bmQoanNTdHJpbmcoZXhlYywgYm9keS0+c3RyaW5nKCkpKTsKIAogICAgIEpTT2JqZWN0KiByZXN1
bHQgPSBjb25zdHJ1Y3RGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGFyZ3MsIG5hbWVJRCwgc291cmNlVVJMID8gc291cmNlVVJMLT5zdHJpbmcoKSA6IFN0cmluZygp
LCBUZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHN0YXJ0aW5nTGlu
ZU51bWJlciksIE9yZGluYWxOdW1iZXI6OmZpcnN0KCkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2Vw
dGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRy
eUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9u
KGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25J
Zk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAgICAgICByZXN1bHQgPSAwOwotICAgIH0KICAg
ICByZXR1cm4gdG9SZWYocmVzdWx0KTsKIH0KIApAQCAtMTgwLDE2ICsxODgsOCBAQCBKU09iamVj
dFJlZiBKU09iamVjdE1ha2VBcnJheShKU0NvbnRleHRSCiAgICAgfSBlbHNlCiAgICAgICAgIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4
Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlv
biA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1F
bnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0
aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRp
b25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAgICAgICByZXN1bHQgPSAwOwotICAgIH0K
IAogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQpAQCAtMjA4LDE2ICsyMDgsOCBAQCBKU09i
amVjdFJlZiBKU09iamVjdE1ha2VEYXRlKEpTQ29udGV4dFJlCiAgICAgICAgIGFyZ0xpc3QuYXBw
ZW5kKHRvSlMoZXhlYywgYXJndW1lbnRzW2ldKSk7CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0g
Y29uc3RydWN0RGF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGFyZ0xpc3Qp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0g
ICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9S
KQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisg
ICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAg
IHJlc3VsdCA9IDA7Ci0gICAgfQogCiAgICAgcmV0dXJuIHRvUmVmKHJlc3VsdCk7CiB9CkBAIC0y
MzUsMTYgKzIyNyw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUVycm9yKEpTQ29udGV4dFIK
ICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5lcnJvclN0cnVjdHVyZSgpOwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBFcnJvckluc3Rh
bmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UpOwogCi0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBl
eGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpl
eGNlcHRpb24gPSB0b1JlZihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4
ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQ
SUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxl
RXhjZXB0aW9uSWZOZWVkZWQoZXhlYywgZXhjZXB0aW9uKSkKICAgICAgICAgcmVzdWx0ID0gMDsK
LSAgICB9CiAKICAgICByZXR1cm4gdG9SZWYocmVzdWx0KTsKIH0KQEAgLTI2MywxNiArMjQ3LDgg
QEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlUmVnRXhwKEpTQ29udGV4dAogICAgICAgICBhcmdM
aXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGFyZ3VtZW50c1tpXSkpOwogCiAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IGNvbnN0cnVjdFJlZ0V4cChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
ICBhcmdMaXN0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNW
YWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhj
ZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZh
bHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0
b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsK
LSNlbmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24p
KQogICAgICAgICByZXN1bHQgPSAwOwotICAgIH0KICAgICAKICAgICByZXR1cm4gdG9SZWYocmVz
dWx0KTsKIH0KQEAgLTMzOSwxNSArMzE1LDcgQEAgSlNWYWx1ZVJlZiBKU09iamVjdEdldFByb3Bl
cnR5KEpTQ29udGV4dAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKIAog
ICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lLT5p
ZGVudGlmaWVyKCZleGVjLT52bSgpKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVj
LCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmpl
Y3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNl
cHRpb25WYWx1ZSk7Ci0jZW5kaWYKLSAgICB9CisgICAgaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQo
ZXhlYywgZXhjZXB0aW9uKTsKICAgICByZXR1cm4gdG9SZWYoZXhlYywganNWYWx1ZSk7CiB9CiAK
QEAgLTM3MiwxNSArMzQwLDcgQEAgdm9pZCBKU09iamVjdFNldFByb3BlcnR5KEpTQ29udGV4dFJl
ZiBjdAogICAgICAgICBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KGpzT2JqZWN0LCBleGVj
LCBuYW1lLCBqc1ZhbHVlLCBzbG90KTsKICAgICB9CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlv
bigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRv
UmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUds
b2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4
ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0KKyAgICBoYW5kbGVFeGNlcHRpb25J
Zk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogfQogCiBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJv
cGVydHlBdEluZGV4KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCwgdW5zaWdu
ZWQgcHJvcGVydHlJbmRleCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAtMzk1LDE1ICszNTUs
NyBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KEpTCiAgICAgSlNPYmpl
Y3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNP
YmplY3QtPmdldChleGVjLCBwcm9wZXJ0eUluZGV4KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlv
bigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRv
UmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUds
b2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4
ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0KKyAgICBoYW5kbGVFeGNlcHRpb25J
Zk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVybiB0b1JlZihleGVjLCBqc1ZhbHVl
KTsKIH0KIApAQCAtNDIxLDE1ICszNzMsNyBAQCB2b2lkIEpTT2JqZWN0U2V0UHJvcGVydHlBdElu
ZGV4KEpTQ29udGV4CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CiAg
ICAgCiAgICAganNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoanNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5SW5kZXgsIGpzVmFsdWUsIGZhbHNlKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2Vw
dGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRy
eUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9u
KGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0KKyAgICBoYW5kbGVFeGNlcHRp
b25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogfQogCiBib29sIEpTT2JqZWN0RGVsZXRlUHJv
cGVydHkoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1N0cmluZ1JlZiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKQEAgLTQ0NCwxNSArMzg4LDcgQEAg
Ym9vbCBKU09iamVjdERlbGV0ZVByb3BlcnR5KEpTQ29udGV4dFJlZgogICAgIEpTT2JqZWN0KiBq
c09iamVjdCA9IHRvSlMob2JqZWN0KTsKIAogICAgIGJvb2wgcmVzdWx0ID0ganNPYmplY3QtPm1l
dGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KGpzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUt
PmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
IHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwot
ICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4
ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNp
ZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9i
amVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4
Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0KKyAgICBoYW5kbGVFeGNlcHRpb25JZk5lZWRl
ZChleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTYxNiwxNiAr
NTUyLDggQEAgSlNWYWx1ZVJlZiBKU09iamVjdENhbGxBc0Z1bmN0aW9uKEpTQ29udAogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gdG9SZWYoZXhlYywgY2FsbChl
eGVjLCBqc09iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1RoaXNPYmplY3QsIGFyZ0xpc3Qp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNl
cHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQot
ICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9s
bGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgor
ICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAgICAg
ICByZXN1bHQgPSAwOwotICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC02NTcsMTYg
KzU4NSw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoSlMKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7IGkrKykKICAgICAgICAgYXJnTGlz
dC5hcHBlbmQodG9KUyhleGVjLCBhcmd1bWVudHNbaV0pKTsKICAgICBKU09iamVjdFJlZiByZXN1
bHQgPSB0b1JlZihjb25zdHJ1Y3QoZXhlYywganNPYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0
cnVjdERhdGEsIGFyZ0xpc3QpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAg
ICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAg
ICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4
Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFC
TEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
blZhbHVlKTsKLSNlbmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBl
eGNlcHRpb24pKQogICAgICAgICByZXN1bHQgPSAwOwotICAgIH0KICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVmLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVmLmNwcAko
cmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFJl
Zi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkFQSUNh
c3QuaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAj
aW5jbHVkZSAiSlNCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNT
Y3JpcHRSZWZQcml2YXRlLmgiCkBAIC0xNDIsMTIgKzE0MywxMiBAQCBKU1ZhbHVlUmVmIEpTU2Ny
aXB0RXZhbHVhdGUoSlNDb250ZXh0UmVmCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBKU1ZhbHVlIGludGVybmFsRXhj
ZXB0aW9uOworICAgIEV4Y2VwdGlvbiogaW50ZXJuYWxFeGNlcHRpb247CiAgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSB0aGlzVmFsdWVSZWYgPyB0b0pTKGV4ZWMsIHRoaXNWYWx1ZVJlZikgOiBqc1Vu
ZGVmaW5lZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoZXhlYywgU291cmNlQ29k
ZShzY3JpcHQpLCB0aGlzVmFsdWUsICZpbnRlcm5hbEV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBldmFsdWF0ZShleGVjLCBTb3VyY2VDb2RlKHNjcmlwdCksIHRoaXNWYWx1ZSwgaW50
ZXJuYWxFeGNlcHRpb24pOwogICAgIGlmIChpbnRlcm5hbEV4Y2VwdGlvbikgewogICAgICAgICBp
ZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGludGVy
bmFsRXhjZXB0aW9uKTsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBpbnRl
cm5hbEV4Y2VwdGlvbi0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBB
U1NFUlQocmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0JKHJl
dmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2ltcG9ydCAiQVBJQ2FzdC5oIgogI2lt
cG9ydCAiRGF0ZUluc3RhbmNlLmgiCiAjaW1wb3J0ICJFcnJvci5oIgorI2ltcG9ydCAiRXhjZXB0
aW9uLmgiCiAjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5oIgogI2ltcG9ydCAiSlNDb250ZXh0SW50
ZXJuYWwuaCIKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgpAQCAtNjQ1LDkg
KzY0NiwxMCBAQCBKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayBKU0NvbnRhaW5lckNvCiB9CiAK
ICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLXN0YXRpYyB2b2lkIHJlcG9ydEV4Y2VwdGlv
blRvSW5zcGVjdG9yKEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU0M6OkpTVmFsdWUgZXhj
ZXB0aW9uKQorc3RhdGljIHZvaWQgcmVwb3J0RXhjZXB0aW9uVG9JbnNwZWN0b3IoSlNHbG9iYWxD
b250ZXh0UmVmIGNvbnRleHQsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb25WYWx1ZSkKIHsKICAgICBK
U0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNDOjpFeGNlcHRpb24q
IGV4Y2VwdGlvbiA9IEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9u
VmFsdWUpOwogICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogfQogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAJKHJldmlzaW9uIDE4
NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNs
dWRlICJEYXRlSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJK
U0FQSVdyYXBwZXJPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZS5oIgpAQCAtNTIsNiArNTMsMjEgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAorc3RhdGljIGJvb2wgaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlUmVmKiByZXR1cm5lZEV4Y2VwdGlvblJlZikKK3sKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBleGVjLT5leGNlcHRp
b24oKTsKKyAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uUmVmKQorICAgICAgICAgICAgKnJl
dHVybmVkRXhjZXB0aW9uUmVmID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uLT52YWx1ZSgpKTsKKyAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKKyAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9s
bGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisjZW5kaWYKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogI2lmIFBMQVRG
T1JNKE1BQykKIHN0YXRpYyBib29sIGV2ZXJub3RlSGFja05lZWRlZCgpCiB7CkBAIC0yMjQsMTUg
KzI0MCw4IEBAIGJvb2wgSlNWYWx1ZUlzRXF1YWwoSlNDb250ZXh0UmVmIGN0eCwgSlMKICAgICBK
U1ZhbHVlIGpzQiA9IHRvSlMoZXhlYywgYik7CiAKICAgICBib29sIHJlc3VsdCA9IEpTVmFsdWU6
OmVxdWFsKGV4ZWMsIGpzQSwganNCKTsgLy8gZmFsc2UgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93
bgotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0g
ICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9S
KQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0g
ICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAg
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjY2LDE1ICsyNzUsNyBAQCBib29sIEpTVmFs
dWVJc0luc3RhbmNlT2ZDb25zdHJ1Y3RvcihKU0NvCiAgICAgaWYgKCFqc0NvbnN0cnVjdG9yLT5z
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGJvb2wgcmVzdWx0ID0ganNDb25zdHJ1Y3Rvci0+aGFzSW5zdGFu
Y2UoZXhlYywganNWYWx1ZSk7IC8vIGZhbHNlIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24KLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25W
YWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAg
ICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAg
ICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCku
cmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0K
KyAgICBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTM2OCwxNiArMzY5LDggQEAgSlNTdHJpbmdSZWYgSlNWYWx1ZUNy
ZWF0ZUpTT05TdHJpbmcoSlNDbwogICAgIFN0cmluZyByZXN1bHQgPSBKU09OU3RyaW5naWZ5KGV4
ZWMsIHZhbHVlLCBpbmRlbnQpOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICpleGNlcHRp
b24gPSAwOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVl
IGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRp
b24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUp
OwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2Vu
ZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIH0KICAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OmNyZWF0
ZShyZXN1bHQpLmxlYWtSZWYoKTsKIH0KIApAQCAtNDA2LDE2ICszOTksOCBAQCBkb3VibGUgSlNW
YWx1ZVRvTnVtYmVyKEpTQ29udGV4dFJlZiBjdHgsCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9K
UyhleGVjLCB2YWx1ZSk7CiAKICAgICBkb3VibGUgbnVtYmVyID0ganNWYWx1ZS50b051bWJlcihl
eGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9u
KQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsK
LSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRp
ZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAg
ICAgICBudW1iZXIgPSBQTmFOOwotICAgIH0KICAgICByZXR1cm4gbnVtYmVyOwogfQogCkBAIC00
MzEsMTYgKzQxNiw4IEBAIEpTU3RyaW5nUmVmIEpTVmFsdWVUb1N0cmluZ0NvcHkoSlNDb250ZXgK
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKICAgICAKICAgICBSZWZQ
dHI8T3BhcXVlSlNTdHJpbmc+IHN0cmluZ1JlZihPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKGpzVmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRp
b24oKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0
b1JlZihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlH
bG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihl
eGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZO
ZWVkZWQoZXhlYywgZXhjZXB0aW9uKSkKICAgICAgICAgc3RyaW5nUmVmLmNsZWFyKCk7Ci0gICAg
fQogICAgIHJldHVybiBzdHJpbmdSZWYucmVsZWFzZSgpLmxlYWtSZWYoKTsKIH0KIApAQCAtNDU2
LDE2ICs0MzMsOCBAQCBKU09iamVjdFJlZiBKU1ZhbHVlVG9PYmplY3QoSlNDb250ZXh0UmVmCiAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CiAgICAgCiAgICAgSlNPYmpl
Y3RSZWYgb2JqZWN0UmVmID0gdG9SZWYoanNWYWx1ZS50b09iamVjdChleGVjKSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUg
PSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAg
ICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAg
IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9y
dEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFu
ZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywgZXhjZXB0aW9uKSkKICAgICAgICAgb2JqZWN0UmVm
ID0gMDsKLSAgICB9CiAgICAgcmV0dXJuIG9iamVjdFJlZjsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MTIsNiArNzEyLDcgQEAKICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JIYW5kbGluZ1Njb3BlLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JJbnN0YW5jZS5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEVycm9yUHJvdG90eXBlLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uRnV6ei5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlvbkhlbHBlcnMuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGVjdXRhYmxlLmNwcCIgLz4KQEAgLTE1MDMs
NiArMTUwNCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEVycm9ySGFu
ZGxpbmdTY29wZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJv
ckluc3RhbmNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEVycm9y
UHJvdG90eXBlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2Vw
dGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb25G
dXp6LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlvbkhl
bHBlcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhlY3V0YWJs
ZS5oIiAvPgpAQCAtMTgyNyw0ICsxODI5LDQgQEAKICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRl
bnNpb25UYXJnZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcQnVp
bGRDdXN0b21pemF0aW9uc1xtYXNtLnRhcmdldHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1By
b2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNp
b24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjk4
LDYgKzE2OTgsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhbHVlU3Ry
ZW5ndGguY3BwIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlvbi5jcHAiPgorICAg
ICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlvbkZ1enouY3BwIj4KICAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtNDE5MCw2ICs0MTkzLDkg
QEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYWx1ZVN0cmVuZ3RoLmgiPgog
ICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uLmgiPgorICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEV4Y2VwdGlvbkZ1enouaCI+CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTQ0ODUsNCArNDQ5MSw0IEBACiAgICAgICA8RmlsdGVy
PmppdDwvRmlsdGVyPgogICAgIDwvTUFTTT4KICAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjYwLDYgKzE2NjAsOCBAQAogCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0OURDMTQ5MTJFRjI2MUEwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNh
Y2hlSXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMEQ0QTA2MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ0QTA0
MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCAqLzsgfTsKIAkJ
RkUwRDRBMDkxQUJBMjQzNzAwMkY1NEJGIC8qIEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTBE
NEEwNzFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNw
cCAqLzsgfTsKKwkJRkUxQzBGRkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxQzBGRkMxQjE5M0U5
ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUZFMUMwRkZGMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxQzBG
RkUxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgKi87IH07CiAJCUZFMjBDRTlEMTVG
MDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlCMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENM
b29wLmNwcCAqLzsgfTsKIAkJRkUyMENFOUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3Au
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlD
MTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUzODRFRTUxQUREQjdBRDAwNTVERTJDIC8qIEpT
RG9sbGFyVk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkUzODRFRTExQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uY3BwICovOyB9OwpAQCAt
MzQ2Myw2ICszNDY1LDggQEAKIAkJRkUwRDRBMDUxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlv
blRpbWVMaW1pdFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRXhlY3V0
aW9uVGltZUxpbWl0VGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDcxQUJBMjQzNzAwMkY1
NEJGIC8qIEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuY3Bw
OyBwYXRoID0gQVBJL3Rlc3RzL0dsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ0QTA4MUFCQTI0MzcwMDJGNTRCRiAvKiBH
bG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0Lmg7IHBhdGggPSBBUEkvdGVz
dHMvR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50
Q0xvb3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRDTG9v
cC5jcHA7IHBhdGggPSBsbGludC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJ
bnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTM4NEVFMTFBRERCN0FE
MDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0RvbGxhclZNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0
MjcsNiArNDQzMSw4IEBACiAJCQkJQkMwMkU5OEIwRTE4M0UzODAwMEY5Mjk3IC8qIEVycm9ySW5z
dGFuY2UuaCAqLywKIAkJCQlCQzAyRTkwNjBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5
cGUuY3BwICovLAogCQkJCUJDMDJFOTA3MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlw
ZS5oICovLAorCQkJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywK
KwkJCQlGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0aW9uLmNwcCAqLywKIAkJCQkw
RjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYx
MkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkxNDI5RDg3
NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBAIC01NjI0LDYg
KzU2MzAsNyBAQAogCQkJCUZFNEQ1NUI4MUFFNzE2Q0EwMDUyRTQ1OSAvKiBJdGVyYXRpb25TdGF0
dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZl
cnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0NDJDQjI1MUE2Q0RCOEMwMDVE
M0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCisJCQkJRkUxQzBGRkQxQjE5M0U5
ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOTExQTA0
MTc3QzAwNkEzMDZEIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1RUE3MTBFMTlGNkRGODEwMDk4RjVFQyAvKiBJbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtNzQwOCw2ICs3NDE1LDcg
QEAKIAkJCQk3QzAwOENEQTE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0MwMDhDRDIxODZGOEE5MzAwOTU1QzI0IC8qIEpTUHJvbWlz
ZUZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzE4NEUxRTE3QkVFMjJFMDA3Q0I2
M0EgLyogSlNQcm9taXNlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFMUMwRkZG
MUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA5
RkI4NkIxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0MwMDhDREUxODcxMjU4RDAwOTU1QzI0IC8qIEpTUHJvbWlzZVJlYWN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2MjU1M0QxMTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzMsMTEgKzEzMywxMSBAQCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSBTY3JpcHRGdW5jdGlvbkNhCiAgICAgICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSgpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAg
RXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgaWYgKG1fY2FsbEhhbmRsZXIpCi0gICAgICAgIHJl
c3VsdCA9IG1fY2FsbEhhbmRsZXIobV9leGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCB0aGlzT2JqZWN0LCBtX2FyZ3VtZW50cywgJmV4Y2VwdGlvbik7CisgICAgICAgIHJlc3VsdCA9
IG1fY2FsbEhhbmRsZXIobV9leGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlz
T2JqZWN0LCBtX2FyZ3VtZW50cywgZXhjZXB0aW9uKTsKICAgICBlbHNlCi0gICAgICAgIHJlc3Vs
dCA9IEpTQzo6Y2FsbChtX2V4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNP
YmplY3QsIG1fYXJndW1lbnRzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgcmVzdWx0ID0gSlNDOjpj
YWxsKG1fZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc09iamVjdCwgbV9h
cmd1bWVudHMsIGV4Y2VwdGlvbik7CiAKICAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAgICAgIGhh
ZEV4Y2VwdGlvbiA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
U2NyaXB0RnVuY3Rpb25DYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZB
VEUgU2NyaXB0RnVuY3Rpb25DYWxsIDogcHVibGljIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIg
ewogcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU1ZhbHVlICgqU2NyaXB0RnVuY3Rpb25DYWxs
SGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEs
IEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpK
U1ZhbHVlKiBleGNlcHRpb24pOworICAgIHR5cGVkZWYgSlNDOjpKU1ZhbHVlICgqU2NyaXB0RnVu
Y3Rpb25DYWxsSGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5j
dGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYg
Y2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJn
cywgSlNDOjpFeGNlcHRpb24qJiBleGNlcHRpb24pOwogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbChj
b25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgU2NyaXB0
RnVuY3Rpb25DYWxsSGFuZGxlciBoYW5kbGVyID0gbnVsbHB0cik7CiAgICAgU2NyaXB0VmFsdWUg
Y2FsbChib29sJiBoYWRFeGNlcHRpb24pOwogICAgIFNjcmlwdFZhbHVlIGNhbGwoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24J
KHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9wdXNoX3dpdGhfc2NvcGUiLCAibGVuZ3RoIiA6IDMgfSwKICAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3BvcF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAogICAg
ICAgICAgICAgeyAibmFtZSIgOiAib3BfcHVzaF9uYW1lX3Njb3BlIiwgImxlbmd0aCIgOiA1IH0s
Ci0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYXRjaCIsICJsZW5ndGgiIDogMiB9LAorICAg
ICAgICAgICAgeyAibmFtZSIgOiAib3BfY2F0Y2giLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX3Rocm93IiwgImxlbmd0aCIgOiAyIH0sCiAgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF90aHJvd19zdGF0aWNfZXJyb3IiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX2RlYnVnIiwgImxlbmd0aCIgOiAzIH0sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkocmV2aXNp
b24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNl
RGVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwMyw3ICszMDMsNiBAQCB2b2lkIGNvbXB1dGVEZWZz
Rm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgogICAg
IGNhc2Ugb3Bfc3RyY2F0OgogICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgotICAgIGNhc2Ugb3Bf
Y2F0Y2g6CiAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKICAgICBjYXNlIG9wX25ld19hcnJheToK
ICAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6CkBAIC0zNzQsNiArMzczLDcgQEAgdm9pZCBj
b21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogICAgICAgICBmdW5jdG9yKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2Ugb3BfY2F0Y2g6CiAgICAgY2FzZSBvcF9j
cmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogewogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAg
ICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDg0LDcgKzE0ODQsOSBA
QCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
b3BfY2F0Y2g6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiY2F0Y2giLCByMCk7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImNhdGNoIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdp
c3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF90aHJvdzogewpAQCAtMjg3OCw3
ICsyODgwLDcgQEAgYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KAogfQog
I2VuZGlmCiAKLUhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNl
dCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0hhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRs
ZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgYm9vbCByZXF1aXJl
Q2F0Y2hIYW5kbGVyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIApAQCAtMjg4OCw2ICsyODkwLDkgQEAgSGFuZGxlckluZm8q
IENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjbwogICAgIFZlY3RvcjxIYW5kbGVySW5mbz4mIGV4
Y2VwdGlvbkhhbmRsZXJzID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyczsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGV4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcnNbaV07CisgICAg
ICAgIGlmIChyZXF1aXJlQ2F0Y2hIYW5kbGVyICYmICFoYW5kbGVyLmlzQ2F0Y2hIYW5kbGVyKCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICAvLyBIYW5kbGVycyBhcmUgb3JkZXJl
ZCBpbm5lcm1vc3QgZmlyc3QsIHNvIHRoZSBmaXJzdCBoYW5kbGVyIHdlIGVuY291bnRlcgogICAg
ICAgICAvLyB0aGF0IGNvbnRhaW5zIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyB0aGUgY29ycmVjdCBo
YW5kbGVyIHRvIHVzZS4KICAgICAgICAgaWYgKGhhbmRsZXIuc3RhcnQgPD0gYnl0ZWNvZGVPZmZz
ZXQgJiYgaGFuZGxlci5lbmQgPiBieXRlY29kZU9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MTg1LDcgKzE4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGluZGV4ID49IG1fbnVtVmFy
czsKICAgICB9CiAKLSAgICBIYW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBIYW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVj
b2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBib29sIHJlcXVpcmVDYXRjaEhhbmRs
ZXIgPSBmYWxzZSk7CiAgICAgdW5zaWduZWQgbGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICB1bnNpZ25lZCBjb2x1bW5OdW1iZXJGb3JCeXRl
Y29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAgdm9pZCBleHByZXNzaW9u
UmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZv
dCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5o
CShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFu
ZGxlckluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBlbnVtIGNsYXNzIEhh
bmRsZXJUeXBlIHsKIHN0cnVjdCBIYW5kbGVySW5mb0Jhc2UgewogICAgIEhhbmRsZXJUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxIYW5kbGVyVHlwZT4odHlwZUJpdHMpOyB9
CiAgICAgdm9pZCBzZXRUeXBlKEhhbmRsZXJUeXBlIHR5cGUpIHsgdHlwZUJpdHMgPSBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4odHlwZSk7IH0KLSAgICAKKwogICAgIGNvbnN0IGNoYXIqIHR5cGVOYW1l
KCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CkBAIC01NSw5ICs1NSw5IEBAIHN0
cnVjdCBIYW5kbGVySW5mb0Jhc2UgewogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KLSAgICAKKwogICAgIGJvb2wgaXNDYXRjaEhhbmRsZXIoKSBjb25zdCB7IHJldHVy
biB0eXBlKCkgPT0gSGFuZGxlclR5cGU6OkNhdGNoOyB9Ci0gICAgCisKICAgICB1aW50MzJfdCBz
dGFydDsKICAgICB1aW50MzJfdCBlbmQ7CiAgICAgdWludDMyX3QgdGFyZ2V0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTI4
LDcgKzI1MjgsNyBAQCBUcnlEYXRhKiBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFRyeShMYWJlCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnBv
cFRyeUFuZEVtaXRDYXRjaChUcnlEYXRhKiB0cnlEYXRhLCBSZWdpc3RlcklEKiB0YXJnZXRSZWdp
c3RlciwgTGFiZWwqIGVuZCwgSGFuZGxlclR5cGUgaGFuZGxlclR5cGUpCit2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwb3BUcnlBbmRFbWl0Q2F0Y2goVHJ5RGF0YSogdHJ5RGF0YSwgUmVnaXN0ZXJJ
RCogZXhjZXB0aW9uUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHRocm93blZhbHVlUmVnaXN0ZXIsIExh
YmVsKiBlbmQsIEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBlKQogewogICAgIG1fdXNlc0V4Y2VwdGlv
bnMgPSB0cnVlOwogICAgIApAQCAtMjU0Niw4ICsyNTQ2LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OnBvcFRyeUFuZAogICAgIHRyeVJhbmdlLnRyeURhdGEtPmhhbmRsZXJUeXBl
ID0gaGFuZGxlclR5cGU7CiAKICAgICBlbWl0T3Bjb2RlKG9wX2NhdGNoKTsKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQodGFyZ2V0UmVnaXN0ZXItPmluZGV4KCkpOwotICAgIHJldHVybiB0YXJn
ZXRSZWdpc3RlcjsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZXhjZXB0aW9uUmVnaXN0ZXIt
PmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0aHJvd25WYWx1ZVJlZ2lzdGVy
LT5pbmRleCgpKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRocm93UmVmZXJl
bmNlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtMjc2MCw3ICsyNzYwLDExIEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbigKICAgICAgICAgLy8gSXRlcmF0
b3JDbG9zZSBzZXF1ZW5jZSBmb3IgdGhyb3ctZWQgY29udHJvbCBmbG93LgogICAgICAgICB7CiAg
ICAgICAgICAgICBSZWZQdHI8TGFiZWw+IGNhdGNoSGVyZSA9IGVtaXRMYWJlbChuZXdMYWJlbCgp
LmdldCgpKTsKLSAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNlcHRpb25SZWdpc3Rl
ciA9IHBvcFRyeUFuZEVtaXRDYXRjaCh0cnlEYXRhLCBuZXdUZW1wb3JhcnkoKSwgY2F0Y2hIZXJl
LmdldCgpLCBIYW5kbGVyVHlwZTo6U3ludGhlc2l6ZWRGaW5hbGx5KTsKKyAgICAgICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBleGNlcHRpb25SZWdpc3RlciA9IG5ld1RlbXBvcmFyeSgpOworICAg
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRocm93blZhbHVlUmVnaXN0ZXIgPSBuZXdUZW1w
b3JhcnkoKTsKKyAgICAgICAgICAgIHBvcFRyeUFuZEVtaXRDYXRjaCh0cnlEYXRhLCBleGNlcHRp
b25SZWdpc3Rlci5nZXQoKSwKKyAgICAgICAgICAgICAgICB0aHJvd25WYWx1ZVJlZ2lzdGVyLmdl
dCgpLCBjYXRjaEhlcmUuZ2V0KCksIEhhbmRsZXJUeXBlOjpTeW50aGVzaXplZEZpbmFsbHkpOwor
CiAgICAgICAgICAgICBSZWZQdHI8TGFiZWw+IGNhdGNoRG9uZSA9IG5ld0xhYmVsKCk7CiAKICAg
ICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5NZXRob2QgPSBlbWl0R2V0QnlJZChu
ZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFtZXMoKS5yZXR1cm5LZXl3
b3JkKTsKQEAgLTI3NzgsNyArMjc4Miw4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRF
bnVtZXJhdGlvbigKICAgICAgICAgICAgIGVtaXRUaHJvdyhleGNlcHRpb25SZWdpc3Rlci5nZXQo
KSk7CiAKICAgICAgICAgICAgIC8vIEFic29yYiBleGNlcHRpb24uCi0gICAgICAgICAgICBwb3BU
cnlBbmRFbWl0Q2F0Y2gocmV0dXJuQ2FsbFRyeURhdGEsIG5ld1RlbXBvcmFyeSgpLCBjYXRjaERv
bmUuZ2V0KCksIEhhbmRsZXJUeXBlOjpTeW50aGVzaXplZEZpbmFsbHkpOworICAgICAgICAgICAg
cG9wVHJ5QW5kRW1pdENhdGNoKHJldHVybkNhbGxUcnlEYXRhLCBuZXdUZW1wb3JhcnkoKSwKKyAg
ICAgICAgICAgICAgICBuZXdUZW1wb3JhcnkoKSwgY2F0Y2hEb25lLmdldCgpLCBIYW5kbGVyVHlw
ZTo6U3ludGhlc2l6ZWRGaW5hbGx5KTsKICAgICAgICAgICAgIGVtaXRUaHJvdyhleGNlcHRpb25S
ZWdpc3Rlci5nZXQoKSk7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24g
MTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NTMsNyArNTUzLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIC8vIFN0YXJ0IGEgdHJ5IGJsb2NrLiAnc3RhcnQnIG11c3QgaGF2ZSBiZWVu
IGVtaXR0ZWQuCiAgICAgICAgIFRyeURhdGEqIHB1c2hUcnkoTGFiZWwqIHN0YXJ0KTsKICAgICAg
ICAgLy8gRW5kIGEgdHJ5IGJsb2NrLiAnZW5kJyBtdXN0IGhhdmUgYmVlbiBlbWl0dGVkLgotICAg
ICAgICBSZWdpc3RlcklEKiBwb3BUcnlBbmRFbWl0Q2F0Y2goVHJ5RGF0YSosIFJlZ2lzdGVySUQq
IHRhcmdldFJlZ2lzdGVyLCBMYWJlbCogZW5kLCBIYW5kbGVyVHlwZSk7CisgICAgICAgIHZvaWQg
cG9wVHJ5QW5kRW1pdENhdGNoKFRyeURhdGEqLCBSZWdpc3RlcklEKiBleGNlcHRpb25SZWdpc3Rl
ciwgUmVnaXN0ZXJJRCogdGhyb3duVmFsdWVSZWdpc3RlciwgTGFiZWwqIGVuZCwgSGFuZGxlclR5
cGUpOwogCiAgICAgICAgIHZvaWQgZW1pdFRocm93KFJlZ2lzdGVySUQqIGV4YykKICAgICAgICAg
eyAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg4MSw3
ICsyODgxLDkgQEAgdm9pZCBUcnlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcgogCiAg
ICAgICAgIC8vIFVuY2F1Z2h0IGV4Y2VwdGlvbiBwYXRoOiB0aGUgY2F0Y2ggYmxvY2suCiAgICAg
ICAgIFJlZlB0cjxMYWJlbD4gaGVyZSA9IGdlbmVyYXRvci5lbWl0TGFiZWwoZ2VuZXJhdG9yLm5l
d0xhYmVsKCkuZ2V0KCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVn
aXN0ZXIgPSBnZW5lcmF0b3IucG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwgaGVyZS5nZXQoKSwgSGFuZGxlclR5cGU6OkNhdGNoKTsKKyAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhyb3duVmFsdWVSZWdpc3RlciA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcFRyeUFuZEVt
aXRDYXRjaCh0cnlEYXRhLCBleGNlcHRpb25SZWdpc3Rlci5nZXQoKSwgdGhyb3duVmFsdWVSZWdp
c3Rlci5nZXQoKSwgaGVyZS5nZXQoKSwgSGFuZGxlclR5cGU6OkNhdGNoKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChtX2ZpbmFsbHlCbG9jaykgewogICAgICAgICAgICAgLy8gSWYgdGhlIGNhdGNo
IGJsb2NrIHRocm93cyBhbiBleGNlcHRpb24gYW5kIHdlIGhhdmUgYSBmaW5hbGx5IGJsb2NrLCB0
aGVuIHRoZSBmaW5hbGx5CkBAIC0yODg5LDcgKzI4OTEsNyBAQCB2b2lkIFRyeU5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyCiAgICAgICAgICAgICB0cnlEYXRhID0gZ2VuZXJhdG9yLnB1
c2hUcnkoaGVyZS5nZXQoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBnZW5lcmF0b3IuZW1pdFB1
c2hDYXRjaFNjb3BlKGdlbmVyYXRvci5zY29wZVJlZ2lzdGVyKCksIG1fZXhjZXB0aW9uSWRlbnQs
IGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLCBEb250RGVsZXRlKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQdXNoQ2F0Y2hTY29wZShnZW5lcmF0b3Iuc2NvcGVSZWdpc3RlcigpLCBtX3Rocm93blZh
bHVlSWRlbnQsIHRocm93blZhbHVlUmVnaXN0ZXIuZ2V0KCksIERvbnREZWxldGUpOwogICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhtX3RyeUJsb2NrLT5lbmRPZmZzZXQo
KSArIDEpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2NhdGNoQmxvY2spOwog
ICAgICAgICBnZW5lcmF0b3IuZW1pdFBvcFNjb3BlKGdlbmVyYXRvci5zY29wZVJlZ2lzdGVyKCkp
OwpAQCAtMjkxMiwxMCArMjkxNCwxMiBAQCB2b2lkIFRyeU5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyCiAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChmaW5hbGx5RW5kTGFiZWwuZ2V0
KCkpOwogCiAgICAgICAgIC8vIFVuY2F1Z2h0IGV4Y2VwdGlvbiBwYXRoOiBpbnZva2UgdGhlIGZp
bmFsbHkgYmxvY2ssIHRoZW4gcmUtdGhyb3cgdGhlIGV4Y2VwdGlvbi4KLSAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHRlbXBFeGNlcHRpb25SZWdpc3RlciA9IGdlbmVyYXRvci5wb3BUcnlBbmRF
bWl0Q2F0Y2godHJ5RGF0YSwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcmVGaW5hbGx5TGFi
ZWwuZ2V0KCksIEhhbmRsZXJUeXBlOjpGaW5hbGx5KTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhyb3duVmFsdWVSZWdpc3RlciA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcFRyeUFuZEVtaXRDYXRjaCh0cnlEYXRh
LCBleGNlcHRpb25SZWdpc3Rlci5nZXQoKSwgdGhyb3duVmFsdWVSZWdpc3Rlci5nZXQoKSwgcHJl
RmluYWxseUxhYmVsLmdldCgpLCBIYW5kbGVyVHlwZTo6RmluYWxseSk7CiAgICAgICAgIGdlbmVy
YXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KGZpbmFsbHlTdGFydE9mZnNldCk7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fZmluYWxseUJsb2NrKTsKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRUaHJvdyh0ZW1wRXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdFRocm93KGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKIAogICAgICAgICBnZW5l
cmF0b3IuZW1pdExhYmVsKGZpbmFsbHlFbmRMYWJlbC5nZXQoKSk7CiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KG1fZmluYWxseUJsb2NrLT5lbmRPZmZzZXQoKSArIDEp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShy
ZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODcsNyArNDg3LDcgQEAgYm9vbCBEZWJ1Z2dlcjo6
aGFzQnJlYWtwb2ludChTb3VyY2VJRCBzbwogICAgIC8vIHNvIG1ha2UgaXQgbG9va3MgbGlrZSB0
aGUgZGVidWdnZXIgaXMgYWxyZWFkeSBwYXVzZWQuCiAgICAgVGVtcG9yYXJ5UGF1c2VkU3RhdGUg
cGF1c2VkU3RhdGUoKnRoaXMpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgRXhjZXB0
aW9uKiBleGNlcHRpb247CiAgICAgRGVidWdnZXJDYWxsRnJhbWUqIGRlYnVnZ2VyQ2FsbEZyYW1l
ID0gY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBkZWJ1
Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoYnJlYWtwb2ludC0+Y29uZGl0aW9uLCBleGNlcHRpb24p
OwogCkBAIC02OTUsMTMgKzY5NSwxMyBAQCB2b2lkIERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKENh
bGxGcmFtZSogCiAgICAgfQogfQogCi12b2lkIERlYnVnZ2VyOjpleGNlcHRpb24oQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTVmFsdWUgZXhjZXB0aW9uLCBib29sIGhhc0hhbmRsZXIpCit2b2lkIERl
YnVnZ2VyOjpleGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgZXhjZXB0aW9u
LCBib29sIGhhc0NhdGNoSGFuZGxlcikKIHsKICAgICBpZiAobV9pc1BhdXNlZCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgUGF1c2VSZWFzb25EZWNsYXJhdGlvbiByZWFzb24oKnRoaXMsIFBhdXNl
ZEZvckV4Y2VwdGlvbik7Ci0gICAgaWYgKG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9PSBQYXVz
ZU9uQWxsRXhjZXB0aW9ucyB8fCAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25V
bmNhdWdodEV4Y2VwdGlvbnMgJiYgIWhhc0hhbmRsZXIpKSB7CisgICAgaWYgKG1fcGF1c2VPbkV4
Y2VwdGlvbnNTdGF0ZSA9PSBQYXVzZU9uQWxsRXhjZXB0aW9ucyB8fCAobV9wYXVzZU9uRXhjZXB0
aW9uc1N0YXRlID09IFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnMgJiYgIWhhc0NhdGNoSGFuZGxl
cikpIHsKICAgICAgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7CiAgICAgICAgIHNl
dFN0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVFbmFibGVkKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkocmV2aXNpb24gMTg1MTgxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFy
c2VkKEV4ZWNTdGF0ZSosIFNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZU51bWJlciwgY29u
c3QgV1RGOjpTdHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwogCi0gICAgdm9pZCBleGNlcHRpb24o
Q2FsbEZyYW1lKiwgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgYm9vbCBoYXNIYW5kbGVyKTsKKyAg
ICB2b2lkIGV4Y2VwdGlvbihDYWxsRnJhbWUqLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBib29s
IGhhc0NhdGNoSGFuZGxlcik7CiAgICAgdm9pZCBhdFN0YXRlbWVudChDYWxsRnJhbWUqKTsKICAg
ICB2b2lkIGNhbGxFdmVudChDYWxsRnJhbWUqKTsKICAgICB2b2lkIHJldHVybkV2ZW50KENhbGxG
cmFtZSopOwpAQCAtMTI0LDcgKzEyNCw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIGJvb2wgbmVlZFBhdXNlSGFuZGxpbmcoSlNHbG9iYWxPYmplY3QqKSB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCcmVha3BvaW50SGl0KEpTR2xvYmFsT2JqZWN0
KiwgY29uc3QgQnJlYWtwb2ludCYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRp
b25JbkJyZWFrcG9pbnRDb25kaXRpb24oRXhlY1N0YXRlKiwgSlNWYWx1ZSBleGNlcHRpb24pIGNv
bnN0IHsgVU5VU0VEX1BBUkFNKGV4Y2VwdGlvbik7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
RXhjZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKEV4ZWNTdGF0ZSosIEV4Y2VwdGlvbiopIGNv
bnN0IHsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQYXVzZShKU0dsb2JhbE9iamVjdCosIFJl
YXNvbkZvclBhdXNlKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RG9uZVByb2Nlc3NpbmdE
ZWJ1Z2dlckV2ZW50cygpIHsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJEZWJ1Z2dlckV2YWxFbmFibGVyLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJTY29wZS5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5j
bHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCkBA
IC0xNzYsNyArMTc3LDcgQEAgSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6dGhpc1ZhbHVlKCkg
YwogfQogCiAvLyBFdmFsdWF0ZSBzb21lIEphdmFTY3JpcHQgY29kZSBpbiB0aGUgc2NvcGUgb2Yg
dGhpcyBmcmFtZS4KLUpTVmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnN0IFN0
cmluZyYgc2NyaXB0LCBKU1ZhbHVlJiBleGNlcHRpb24pCitKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZy
YW1lOjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgRXhjZXB0aW9uKiYgZXhjZXB0aW9u
KQogewogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
bV9jYWxsRnJhbWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJDYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJDYWxsRnJhbWUuaAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDYgKzM4LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBEZWJ1Z2dlclNjb3BlOwor
Y2xhc3MgRXhjZXB0aW9uOwogY2xhc3MgRXhlY1N0YXRlOwogdHlwZWRlZiBFeGVjU3RhdGUgQ2Fs
bEZyYW1lOwogCkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBTdHJpbmcgZnVuY3Rpb25OYW1lKCkgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgVHlw
ZSB0eXBlKCkgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0aGlzVmFsdWUo
KSBjb25zdDsKLSAgICBKU1ZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0cmluZyYsIEpTVmFsdWUmIGV4
Y2VwdGlvbik7CisgICAgSlNWYWx1ZSBldmFsdWF0ZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb24q
Jik7CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhIW1fY2FsbEZyYW1lOyB9
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbnZhbGlkYXRlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1h
bmFnZXIuY3BwCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw5
ICsxMzksOSBAQCBEZXByZWNhdGVkOjpTY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRNCiAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCk7CiAgICAgSlNWYWx1ZSBnbG9iYWxUaGlzVmFsdWUgPSBzY3JpcHRTdGF0ZS0+Z2xv
YmFsVGhpc1ZhbHVlKCk7CiAKLSAgICBKU1ZhbHVlIGV2YWx1YXRpb25FeGNlcHRpb247CisgICAg
RXhjZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgIEluc3BlY3RvckV2YWx1YXRlSGFu
ZGxlciBldmFsdWF0ZUhhbmRsZXIgPSBtX2Vudmlyb25tZW50LmV2YWx1YXRlSGFuZGxlcigpOwot
ICAgIEpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGV2YWx1YXRlSGFuZGxlcihzY3JpcHRTdGF0ZSwg
c291cmNlQ29kZSwgZ2xvYmFsVGhpc1ZhbHVlLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAg
SlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gZXZhbHVhdGVIYW5kbGVyKHNjcmlwdFN0YXRlLCBzb3Vy
Y2VDb2RlLCBnbG9iYWxUaGlzVmFsdWUsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIGlmIChl
dmFsdWF0aW9uRXhjZXB0aW9uKQogICAgICAgICByZXR1cm4gRGVwcmVjYXRlZDo6U2NyaXB0T2Jq
ZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckVudmlyb25tZW50LmgJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRW52aXJvbm1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsMTMgKzMzLDE0IEBAIGNsYXNzIFN0b3B3YXRjaDsKIH0KIAogbmFtZXNwYWNl
IEpTQyB7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBTb3VyY2VDb2RlOwogfQogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBKU0M6OkpTVmFsdWUgKCpJbnNwZWN0b3JGdW5jdGlv
bkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9u
T2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiBjYWxs
RGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBK
U0M6OkpTVmFsdWUqIGV4Y2VwdGlvbik7Ci10eXBlZGVmIEpTQzo6SlNWYWx1ZSAoKkluc3BlY3Rv
ckV2YWx1YXRlSGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUm
LCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbik7Cit0eXBl
ZGVmIEpTQzo6SlNWYWx1ZSAoKkluc3BlY3RvckZ1bmN0aW9uQ2FsbEhhbmRsZXIpKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUg
Y2FsbFR5cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJu
ZWRFeGNlcHRpb24pOwordHlwZWRlZiBKU0M6OkpTVmFsdWUgKCpJbnNwZWN0b3JFdmFsdWF0ZUhh
bmRsZXIpKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiwgSlNDOjpKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKIGNs
YXNzIEluc3BlY3RvckVudmlyb25tZW50IHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNvbXBsZXRp
b24uaCIKICNpbmNsdWRlICJDb25zb2xlTWVzc2FnZS5oIgogI2luY2x1ZGUgIkVycm9ySGFuZGxp
bmdTY29wZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkluamVjdGVkU2Ny
aXB0SG9zdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0TWFuYWdlci5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvckFnZW50LmgiCkBAIC0xODgsNyArMTg5LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVj
dEluc3BlY3RvckNvbnRyb2xsZXI6OgogI2VuZGlmCiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3RJ
bnNwZWN0b3JDb250cm9sbGVyOjpyZXBvcnRBUElFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGV4Y2VwdGlvbikKK3ZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVy
OjpyZXBvcnRBUElFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlv
bikKIHsKICAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbikp
CiAgICAgICAgIHJldHVybjsKQEAgLTIwMSw3ICsyMDIsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0
SW5zcGVjdG9yQ29udHJvbGxlcjo6CiAKICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTE1MDg3PiBXZWIgSW5zcGVjdG9yOiBTaG91bGQgbm90IGV2YWx1YXRlIEphdmFTY3JpcHQg
aGFuZGxpbmcgZXhjZXB0aW9ucwogICAgIC8vIElmIHRoaXMgaXMgYSBjdXN0b20gZXhjZXB0aW9u
IG9iamVjdCwgY2FsbCB0b1N0cmluZyBvbiBpdCB0byB0cnkgYW5kIGdldCBhIG5pY2Ugc3RyaW5n
IHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZXhjZXB0aW9uLgotICAgIFN0cmluZyBlcnJvck1lc3Nh
Z2UgPSBleGNlcHRpb24udG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIFN0cmluZyBl
cnJvck1lc3NhZ2UgPSBleGNlcHRpb24tPnZhbHVlKCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICBpZiAoSlNHbG9iYWxPYmpl
Y3RDb25zb2xlQ2xpZW50Ojpsb2dUb1N5c3RlbUNvbnNvbGUoKSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFs
T2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5oCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIGNsYXNzIFN0b3B3YXRjaDsKIAog
bmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDb25zb2xlQ2xpZW50OworY2xhc3MgRXhjZXB0aW9uOwog
Y2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU1ZhbHVlOwpA
QCAtODEsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJbmNsdWRlc05hdGl2ZUNhbGxT
dGFja1doZW5SZXBvcnRpbmdFeGNlcHRpb25zKGJvb2wgaW5jbHVkZXNOYXRpdmVDYWxsU3RhY2sp
IHsgbV9pbmNsdWRlTmF0aXZlQ2FsbFN0YWNrV2l0aEV4Y2VwdGlvbnMgPSBpbmNsdWRlc05hdGl2
ZUNhbGxTdGFjazsgfQogCiAgICAgdm9pZCBwYXVzZSgpOwotICAgIHZvaWQgcmVwb3J0QVBJRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbik7CisgICAgdm9p
ZCByZXBvcnRBUElFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiopOwog
CiAgICAgSlNDOjpDb25zb2xlQ2xpZW50KiBjb25zb2xlQ2xpZW50KCkgY29uc3Q7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1
Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAxODUxODEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdT
ZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgogICAgIC8v
IE5PVEU6IEN1cnJlbnRseSBhbGwgZXhjZXB0aW9ucyBhcmUgcmVwb3J0ZWQgYXQgdGhlIEFQSSBi
b3VuZGFyeSB0aHJvdWdoIHJlcG9ydEFQSUV4Y2VwdGlvbi4KICAgICAvLyBVbnRpbCBhIHRpbWUg
Y29tZXMgd2hlcmUgYW4gZXhjZXB0aW9uIGNhbiBiZSBjYXVzZWQgb3V0c2lkZSBvZiB0aGUgQVBJ
IChlLmcuIHNldFRpbWVvdXQKICAgICAvLyBvciBzb21lIG90aGVyIGFzeW5jIG9wZXJhdGlvbiBp
biBhIHB1cmUgSlNDb250ZXh0KSB3ZSBjYW4gaWdub3JlIGV4Y2VwdGlvbnMgcmVwb3J0ZWQgaGVy
ZS4KLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qKSBjb25zdCBvdmVycmlkZSB7
IH0KIAogICAgIExpc3RlbmVyU2V0IG1fbGlzdGVuZXJzOwogICAgIEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIG1fZ2xvYmFsT2JqZWN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMTg1
MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxs
RnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJE
ZWJ1Z2dlclNjb3BlLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24u
aCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oIgpAQCAtNzUsNyArNzYs
NyBAQCBKU0phdmFTY3JpcHRDYWxsRnJhbWU6On5KU0phdmFTY3JpcHRDYWxsCiAKIEpTVmFsdWUg
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
SlNWYWx1ZSBleGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBpbXBsKCkuZXZhbHVhdGUoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpLCBleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAg
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFt
ZS5oCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0phdmFTY3JpcHRDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBw
dWJsaWM6CiAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogdm1FbnRyeUdsb2JhbE9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3QoKTsg
fQogCiAgICAgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdn
ZXJDYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOyB9Ci0gICAgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlKGNv
bnN0IFN0cmluZyYgc2NyaXB0LCBKU0M6OkpTVmFsdWUmIGV4Y2VwdGlvbikgY29uc3QgIHsgcmV0
dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKHNjcmlwdCwgZXhjZXB0aW9uKTsgfQor
ICAgIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNDOjpFeGNl
cHRpb24qJiBleGNlcHRpb24pIGNvbnN0ICB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLT5l
dmFsdWF0ZShzY3JpcHQsIGV4Y2VwdGlvbik7IH0KIAogcHJpdmF0ZToKICAgICBKYXZhU2NyaXB0
Q2FsbEZyYW1lKFBhc3NSZWZQdHI8SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZT4pOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxT
dGFja0ZhY3RvcnkuY3BwCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgogCiAj
aW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJTY3JpcHRB
cmd1bWVudHMuaCIKQEAgLTEyOCwxMCArMTI5LDEwIEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RTb3Vy
Y2VJbmZvcm1hdGlvbkZyb20KICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogfQogCi1QYXNz
UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlJiBleGNlcHRpb24sIHNpemVfdCBt
YXhTdGFja1NpemUpCitQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2Fs
bFN0YWNrRnJvbUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNlcHRpb24q
IGV4Y2VwdGlvbiwgc2l6ZV90IG1heFN0YWNrU2l6ZSkKIHsKICAgICBWZWN0b3I8U2NyaXB0Q2Fs
bEZyYW1lPiBmcmFtZXM7Ci0gICAgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+IHN0YWNrVHJh
Y2UgPSBleGVjLT52bSgpLmV4Y2VwdGlvblN0YWNrKCk7CisgICAgUmVmQ291bnRlZEFycmF5PFN0
YWNrRnJhbWU+IHN0YWNrVHJhY2UgPSBleGNlcHRpb24tPnN0YWNrKCk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdGFja1RyYWNlLnNpemUoKSAmJiBpIDwgbWF4U3RhY2tTaXplOyBpKysp
IHsKICAgICAgICAgdW5zaWduZWQgbGluZTsKICAgICAgICAgdW5zaWduZWQgY29sdW1uOwpAQCAt
MTQxLDggKzE0Miw4IEBAIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHQK
ICAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0byBnZXR0aW5nIGF0IGxlYXN0IHRoZSBsaW5lIGFu
ZCBzb3VyY2VVUkwgZnJvbSB0aGUgZXhjZXB0aW9uIG9iamVjdCBpZiBpdCBoYXMgdmFsdWVzIGFu
ZCB0aGUgZXhjZXB0aW9uU3RhY2sgZG9lc24ndC4KLSAgICBKU09iamVjdCogZXhjZXB0aW9uT2Jq
ZWN0ID0gZXhjZXB0aW9uLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGNlcHRpb24uaXNPYmpl
Y3QoKSkgeworICAgIGlmIChleGNlcHRpb24tPnZhbHVlKCkuaXNPYmplY3QoKSkgeworICAgICAg
ICBKU09iamVjdCogZXhjZXB0aW9uT2JqZWN0ID0gZXhjZXB0aW9uLT52YWx1ZSgpLnRvT2JqZWN0
KGV4ZWMpOwogICAgICAgICBpbnQgbGluZU51bWJlcjsKICAgICAgICAgaW50IGNvbHVtbk51bWJl
cjsKICAgICAgICAgU3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9y
eS5oCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBKU0MgeworY2xhc3MgRXhj
ZXB0aW9uOwogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSlNWYWx1ZTsKIH0KQEAgLTQ3LDcgKzQ4
LDcgQEAgY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwogLy8gRklYTUU6IFRoZSBzdWJ0bGUgZGlmZmVy
ZW5jZXMgYmV0d2VlbiB0aGVzZSBzaG91bGQgYmUgZWxpbWluYXRlZC4KIEpTX0VYUE9SVF9QUklW
QVRFIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2soSlND
OjpFeGVjU3RhdGUqLCBzaXplX3QgbWF4U3RhY2tTaXplKTsKIEpTX0VYUE9SVF9QUklWQVRFIFBh
c3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGb3JDb25zb2xl
KEpTQzo6RXhlY1N0YXRlKiwgc2l6ZV90IG1heFN0YWNrU2l6ZSk7Ci1KU19FWFBPUlRfUFJJVkFU
RSBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSYgZXhjZXB0aW9uLCBzaXplX3Qg
bWF4U3RhY2tTaXplKTsKK0pTX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0
YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFeGNlcHRpb24qLCBzaXplX3QgbWF4U3RhY2tTaXplKTsKIEpTX0VYUE9SVF9QUklWQVRF
IFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBjcmVhdGVTY3JpcHRBcmd1bWVudHMoSlNDOjpF
eGVjU3RhdGUqLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCk7CiAKIH0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJEZWJ1Z2dlckNhbGxGcmFtZS5oIgog
I2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNs
dWRlICJKU0phdmFTY3JpcHRDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNs
dWRlICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCkBAIC05Myw3ICs5NCw3IEBAIGJvb2wgU2NyaXB0
RGVidWdTZXJ2ZXI6OmV2YWx1YXRlQnJlYWtwb2kKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgU2NyaXB0QnJlYWtwb2ludEFjdGlvblR5cGVFdmFsdWF0ZTogewotICAgICAgICBKU1Zh
bHVlIGV4Y2VwdGlvbjsKKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgICAgIGRl
YnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0ZShicmVha3BvaW50QWN0aW9uLmRhdGEsIGV4Y2VwdGlv
bik7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICByZXBvcnRFeGNlcHRpb24o
ZGVidWdnZXJDYWxsRnJhbWUtPmV4ZWMoKSwgZXhjZXB0aW9uKTsKQEAgLTEwMywxMyArMTA0LDEz
IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OmV2YWx1YXRlQnJlYWtwb2kKICAgICAgICAgZGlz
cGF0Y2hCcmVha3BvaW50QWN0aW9uU291bmQoZGVidWdnZXJDYWxsRnJhbWUtPmV4ZWMoKSwgYnJl
YWtwb2ludEFjdGlvbi5pZGVudGlmaWVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTY3Jp
cHRCcmVha3BvaW50QWN0aW9uVHlwZVByb2JlOiB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9u
OworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQg
PSBkZWJ1Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoYnJlYWtwb2ludEFjdGlvbi5kYXRhLCBleGNl
cHRpb24pOwogICAgICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICAgICAgcmVwb3J0RXhjZXB0
aW9uKGRlYnVnZ2VyQ2FsbEZyYW1lLT5leGVjKCksIGV4Y2VwdGlvbik7CiAgICAgICAgIAogICAg
ICAgICBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUgPSBkZWJ1Z2dlckNhbGxGcmFtZS0+c2NvcGUoKS0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUgd3JhcHBlZFJlc3VsdCA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKHN0YXRlLT52bSgp
LCBleGNlcHRpb24gPyBleGNlcHRpb24gOiByZXN1bHQpOworICAgICAgICBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSB3cmFwcGVkUmVzdWx0ID0gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoc3RhdGUt
PnZtKCksIGV4Y2VwdGlvbiA/IGV4Y2VwdGlvbi0+dmFsdWUoKSA6IHJlc3VsdCk7CiAgICAgICAg
IGRpc3BhdGNoQnJlYWtwb2ludEFjdGlvblByb2JlKHN0YXRlLCBicmVha3BvaW50QWN0aW9uLCB3
cmFwcGVkUmVzdWx0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzAyLDcgKzMwMyw3IEBA
IHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZUJyZWFrcG9pbnQKICAgICB9CiB9CiAKLXZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlv
bihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbikgY29uc3QKK3Zv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlv
bihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbikgY29uc3QK
IHsKICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmgJ
KHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2Ny
aXB0RGVidWdTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbnRpbnVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHJ1bkV2ZW50TG9vcFdoaWxlUGF1c2VkKCkgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRTY3JpcHQoSlNDOjpFeGVjU3RhdGUqKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiopIGNvbnN0ID0gMDsKIAogICAgIGJvb2wgZXZh
bHVhdGVCcmVha3BvaW50QWN0aW9uKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mKTsKIApA
QCAtMTAxLDcgKzEwMSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNvdXJjZVBhcnNl
ZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6U291cmNlUHJvdmlkZXIqLCBpbnQgZXJyb3JMaW5lLCBj
b25zdCBTdHJpbmcmIGVycm9yTXNnKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIGJvb2wg
bmVlZFBhdXNlSGFuZGxpbmcoSlNDOjpKU0dsb2JhbE9iamVjdCopIG92ZXJyaWRlIGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQnJlYWtwb2ludEhpdChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSlNDOjpCcmVha3BvaW50Jikgb3ZlcnJpZGUgZmluYWw7
Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24pIGNvbnN0IG92ZXJyaWRlIGZp
bmFsOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRp
b24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiopIGNvbnN0IG92ZXJyaWRlIGZpbmFs
OwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQYXVzZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpEZWJ1Z2dlcjo6UmVhc29uRm9yUGF1c2UpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCkgb3ZlcnJpZGUgZmluYWw7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmgJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDExIEBACiAjZGVmaW5l
IENhbGxGcmFtZV9oCiAKICNpbmNsdWRlICJBYnN0cmFjdFBDLmgiCi0jaW5jbHVkZSAiVk0uaCIK
ICNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgi
CiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIKKyNpbmNs
dWRlICJWTS5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKIAogbmFtZXNwYWNlIEpTQyAg
ewpAQCAtNzUsMTMgKzc1LDkgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyBCdXQgdGhl
eSdyZSB1c2VkIGluIG1hbnkgcGxhY2VzIGluIGxlZ2FjeSBjb2RlLCBzbyB0aGV5J3JlIG5vdCBn
b2luZyBhd2F5IGFueSB0aW1lIHNvb24uCiAKICAgICAgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigp
IHsgdm0oKS5jbGVhckV4Y2VwdGlvbigpOyB9Ci0gICAgICAgIHZvaWQgY2xlYXJTdXBwbGVtZW50
YXJ5RXhjZXB0aW9uSW5mbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZtKCkuY2xlYXJFeGNl
cHRpb25TdGFjaygpOwotICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24oKSBj
b25zdCB7IHJldHVybiB2bSgpLmV4Y2VwdGlvbigpOyB9Ci0gICAgICAgIGJvb2wgaGFkRXhjZXB0
aW9uKCkgY29uc3QgeyByZXR1cm4gIXZtKCkuZXhjZXB0aW9uKCkuaXNFbXB0eSgpOyB9CisgICAg
ICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gdm0oKS5leGNlcHRpb24o
KTsgfQorICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuICEhdm0oKS5l
eGNlcHRpb24oKTsgfQogCiAgICAgICAgIEF0b21pY1N0cmluZ1RhYmxlKiBhdG9taWNTdHJpbmdU
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHZtKCkuYXRvbWljU3RyaW5nVGFibGUoKTsgfQogICAgICAg
ICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJu
ICp2bSgpLnByb3BlcnR5TmFtZXM7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkRlYnVnZ2VyQ2FsbEZyYW1lLmgiCiAj
aW5jbHVkZSAiRXJyb3JJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkV2YWxDb2RlQ2FjaGUuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5j
bHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgpAQCAtNDM1LDcgKzQz
Niw3IEBAIHN0YXRpYyBib29sIHVud2luZENhbGxGcmFtZShTdGFja1Zpc2l0b3IKIHsKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZpc2l0b3ItPmNhbGxGcmFtZSgpOwogICAgIGlmIChEZWJ1
Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+ZGVidWdn
ZXIoKSkgewotICAgICAgICBDbGVhckV4Y2VwdGlvblNjb3BlIHNjb3BlKCZjYWxsRnJhbWUtPnZt
KCkpOworICAgICAgICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgc2NvcGUoJmNhbGxGcmFtZS0+dm0o
KSk7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmNh
bGxlZSgpKSkKICAgICAgICAgICAgIGRlYnVnZ2VyLT5yZXR1cm5FdmVudChjYWxsRnJhbWUpOwog
ICAgICAgICBlbHNlCkBAIC01ODMsOSArNTg0LDkgQEAgSlNTdHJpbmcqIEludGVycHJldGVyOjpz
dGFja1RyYWNlQXNTdHJpbgogICAgIHJldHVybiBqc1N0cmluZygmZXhlYy0+dm0oKSwgYnVpbGRl
ci50b1N0cmluZygpKTsKIH0KIAotY2xhc3MgR2V0RXhjZXB0aW9uSGFuZGxlckZ1bmN0b3Igewor
Y2xhc3MgR2V0Q2F0Y2hIYW5kbGVyRnVuY3RvciB7CiBwdWJsaWM6Ci0gICAgR2V0RXhjZXB0aW9u
SGFuZGxlckZ1bmN0b3IoKQorICAgIEdldENhdGNoSGFuZGxlckZ1bmN0b3IoKQogICAgICAgICA6
IG1faGFuZGxlcigwKQogICAgIHsKICAgICB9CkBAIC01OTksNyArNjAwLDggQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAKICAgICAgICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQgPSB2aXNpdG9yLT5ieXRlY29kZU9mZnNldCgpOwotICAgICAg
ICBtX2hhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCk7CisgICAgICAgIGNvbnN0IGJvb2wgUmVxdWlyZUNhdGNoSGFuZGxlciA9IHRydWU7
CisgICAgICAgIG1faGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0
KGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlQ2F0Y2hIYW5kbGVyKTsKICAgICAgICAgaWYgKG1faGFu
ZGxlcikKICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAKQEAgLTY0OSwx
MSArNjUxLDEyIEBAIHByaXZhdGU6CiAgICAgSGFuZGxlckluZm8qJiBtX2hhbmRsZXI7CiB9Owog
Ci1ORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk1FbnRyeUZy
YW1lKiYgdm1FbnRyeUZyYW1lLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEpTVmFsdWUmIGV4Y2Vw
dGlvblZhbHVlKQorTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5k
KFZNRW50cnlGcmFtZSomIHZtRW50cnlGcmFtZSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGNl
cHRpb24qIGV4Y2VwdGlvbikKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCk7CiAgICAgYm9vbCBpc1Rlcm1pbmF0aW9uID0gZmFsc2U7CiAKKyAgICBK
U1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhjZXB0aW9uLT52YWx1ZSgpOwogICAgIEFTU0VSVCgh
ZXhjZXB0aW9uVmFsdWUuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIWV4Y2VwdGlvblZhbHVlLmlz
Q2VsbCgpIHx8IGV4Y2VwdGlvblZhbHVlLmFzQ2VsbCgpKTsKICAgICAvLyBUaGlzIHNob3VsZG4n
dCBiZSBwb3NzaWJsZSAoaGVuY2UgdGhlIGFzc2VydGlvbnMpLCBidXQgd2UncmUgYWxyZWFkeSBp
biB0aGUgc2xvd2VzdCBvZgpAQCAtNjYyLDMyICs2NjUsMzUgQEAgTkVWRVJfSU5MSU5FIEhhbmRs
ZXJJbmZvKiBJbnRlcnByZXRlcjo6dQogICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGpzTnVsbCgp
OwogCiAgICAgaWYgKGV4Y2VwdGlvblZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIGlzVGVybWlu
YXRpb24gPSBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oYXNPYmplY3QoZXhjZXB0aW9u
VmFsdWUpKTsKKyAgICAgICAgaXNUZXJtaW5hdGlvbiA9IGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4
Y2VwdGlvbihleGNlcHRpb24pOwogCi0gICAgQVNTRVJUKGNhbGxGcmFtZS0+dm0oKS5leGNlcHRp
b25TdGFjaygpLnNpemUoKSk7CisgICAgQVNTRVJUKGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24o
KSAmJiBjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKCktPnN0YWNrKCkuc2l6ZSgpKTsKIAogICAg
IERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5k
ZWJ1Z2dlcigpOwotICAgIGlmIChkZWJ1Z2dlciAmJiBkZWJ1Z2dlci0+bmVlZHNFeGNlcHRpb25D
YWxsYmFja3MoKSkgewotICAgICAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIHRoZSBleGNlcHRpb24g
YW5kIHRoZSBleGNlcHRpb24gc3RhY2sgaGVyZSBpbiBvcmRlciB0byBzZWUgaWYgYSBuZXcgZXhj
ZXB0aW9uIGhhcHBlbnMuCisgICAgaWYgKGRlYnVnZ2VyICYmIGRlYnVnZ2VyLT5uZWVkc0V4Y2Vw
dGlvbkNhbGxiYWNrcygpICYmICFleGNlcHRpb24tPmRpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3co
KSkgeworICAgICAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIHRoZSBleGNlcHRpb24gaGVyZSBpbiBv
cmRlciB0byBzZWUgaWYgYSBuZXcgZXhjZXB0aW9uIGhhcHBlbnMuCiAgICAgICAgIC8vIEFmdGVy
d2FyZHMsIHRoZSB2YWx1ZXMgYXJlIHB1dCBiYWNrIHRvIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhp
cyBlcnJvci4KLSAgICAgICAgQ2xlYXJFeGNlcHRpb25TY29wZSBzY29wZSgmY2FsbEZyYW1lLT52
bSgpKTsKKyAgICAgICAgU3VzcGVuZEV4Y2VwdGlvblNjb3BlIHNjb3BlKCZjYWxsRnJhbWUtPnZt
KCkpOwogICAgICAgICAvLyBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IGlmIHRoZSBkZWJ1Z2dlciBp
cyBlbmFibGVkIHRoZW4gdGhlcmUgaXMgbm8gaW5saW5pbmcuCiAgICAgICAgIC8vIElmIHRoYXQg
YXNzdW1wdGlvbiB0dXJucyBvdXQgdG8gYmUgZmFsc2UgdGhlbiB3ZSdsbCBpZ25vcmUgdGhlIGlu
bGluZWQgY2FsbAogICAgICAgICAvLyBmcmFtZXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3NTQKIAotICAgICAgICBib29sIGhhc0hhbmRs
ZXI7CisgICAgICAgIGJvb2wgaGFzQ2F0Y2hIYW5kbGVyOwogICAgICAgICBpZiAoaXNUZXJtaW5h
dGlvbikKLSAgICAgICAgICAgIGhhc0hhbmRsZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGhhc0Nh
dGNoSGFuZGxlciA9IGZhbHNlOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEdldEV4Y2Vw
dGlvbkhhbmRsZXJGdW5jdG9yIGZ1bmN0b3I7CisgICAgICAgICAgICBHZXRDYXRjaEhhbmRsZXJG
dW5jdG9yIGZ1bmN0b3I7CiAgICAgICAgICAgICBjYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7
Ci0gICAgICAgICAgICBoYXNIYW5kbGVyID0gISFmdW5jdG9yLmhhbmRsZXIoKTsKKyAgICAgICAg
ICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gZnVuY3Rvci5oYW5kbGVyKCk7CisgICAgICAgICAg
ICBBU1NFUlQoIWhhbmRsZXIgfHwgaGFuZGxlci0+aXNDYXRjaEhhbmRsZXIoKSk7CisgICAgICAg
ICAgICBoYXNDYXRjaEhhbmRsZXIgPSAhIWhhbmRsZXI7CiAgICAgICAgIH0KIAotICAgICAgICBk
ZWJ1Z2dlci0+ZXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGhhc0hhbmRsZXIp
OworICAgICAgICBkZWJ1Z2dlci0+ZXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUs
IGhhc0NhdGNoSGFuZGxlcik7CiAgICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRp
b24oKSk7CiAgICAgfQorICAgIGV4Y2VwdGlvbi0+c2V0RGlkTm90aWZ5SW5zcGVjdG9yT2ZUaHJv
dygpOwogCiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHZQQywgdW53aW5k
aW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4KICAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9
IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuaAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDIwICs5OCwyMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBleHByZXNzaW9uSW5mbyhpbnQmIGRpdm90LCBp
bnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVk
JiBjb2x1bW4pOwogICAgIH07CiAKLSAgICBjbGFzcyBDbGVhckV4Y2VwdGlvblNjb3BlIHsKKyAg
ICBjbGFzcyBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgQ2xl
YXJFeGNlcHRpb25TY29wZShWTSogdm0pOiBtX3ZtKHZtKQorICAgICAgICBTdXNwZW5kRXhjZXB0
aW9uU2NvcGUoVk0qIHZtKQorICAgICAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICB7Ci0gICAg
ICAgICAgICB2bS0+Z2V0RXhjZXB0aW9uSW5mbyhvbGRFeGNlcHRpb24sIG9sZEV4Y2VwdGlvblN0
YWNrKTsKKyAgICAgICAgICAgIG9sZEV4Y2VwdGlvbiA9IHZtLT5leGNlcHRpb24oKTsKICAgICAg
ICAgICAgIHZtLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICB9Ci0gICAgICAgIH5DbGVhckV4
Y2VwdGlvblNjb3BlKCkKKyAgICAgICAgflN1c3BlbmRFeGNlcHRpb25TY29wZSgpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIG1fdm0tPnNldEV4Y2VwdGlvbkluZm8ob2xkRXhjZXB0aW9uLCBvbGRF
eGNlcHRpb25TdGFjayk7CisgICAgICAgICAgICBtX3ZtLT5zZXRFeGNlcHRpb24ob2xkRXhjZXB0
aW9uKTsKICAgICAgICAgfQogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTQzo6SlNWYWx1ZSBvbGRF
eGNlcHRpb247Ci0gICAgICAgIFJlZkNvdW50ZWRBcnJheTxKU0M6OlN0YWNrRnJhbWU+IG9sZEV4
Y2VwdGlvblN0YWNrOworICAgICAgICBFeGNlcHRpb24qIG9sZEV4Y2VwdGlvbjsKICAgICAgICAg
Vk0qIG1fdm07CiAgICAgfTsKICAgICAKQEAgLTIxNSw3ICsyMTUsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgCiAgICAgICAgIFNhbXBsaW5nVG9vbCogc2FtcGxlcigpIHsgcmV0dXJuIG1f
c2FtcGxlci5nZXQoKTsgfQogCi0gICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdW53
aW5kKFZNRW50cnlGcmFtZSomLCBDYWxsRnJhbWUqJiwgSlNWYWx1ZSYpOworICAgICAgICBORVZF
Ul9JTkxJTkUgSGFuZGxlckluZm8qIHVud2luZChWTUVudHJ5RnJhbWUqJiwgQ2FsbEZyYW1lKiYs
IEV4Y2VwdGlvbiopOwogICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBkZWJ1ZyhDYWxsRnJhbWUq
LCBEZWJ1Z0hvb2tJRCk7CiAgICAgICAgIEpTU3RyaW5nKiBzdGFja1RyYWNlQXNTdHJpbmcoRXhl
Y1N0YXRlKiwgVmVjdG9yPFN0YWNrRnJhbWU+KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjMsNyArMjIzLDcgQEAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVy
czo6ZQogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgcmVzdWx0ID0gYnJhbmNoVGVzdDY0KGtpbmQg
PT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb25aZXJvIDogWmVybywgQWJzb2x1dGVBZGRyZXNz
KHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgIHJlc3VsdCA9IGJyYW5jaDMyKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RF
cXVhbCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0o
KS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgIHJl
c3VsdCA9IGJyYW5jaDMyKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6
IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpLCBUcnVz
dGVkSW1tMzIoMCkpOwogI2VuZGlmCiAgICAgCiAgICAgaWYgKHdpZHRoID09IE5vcm1hbEp1bXBX
aWR0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNw
cAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNl
cHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTYgKzQwLDE3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi12b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFt
ZSwgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSkKK3ZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4
ZWNTdGF0ZSogY2FsbEZyYW1lKQogewogICAgIGlmIChPcHRpb25zOjpicmVha09uVGhyb3coKSkg
ewogICAgICAgICBkYXRhTG9nKCJJbiBjYWxsIGZyYW1lICIsIFJhd1BvaW50ZXIoY2FsbEZyYW1l
KSwgIiBmb3IgY29kZSBibG9jayAiLCAqY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgIlxuIik7CiAg
ICAgICAgIENSQVNIKCk7CiAgICAgfQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2VwdGlv
blZhbHVlKTsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHZtLT5leGNlcHRpb24oKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb24pOwogICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZy
YW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IHZt
LT5pbnRlcnByZXRlci0+dW53aW5kKHZtRW50cnlGcmFtZSwgY2FsbEZyYW1lLCBleGNlcHRpb25W
YWx1ZSk7IC8vIFRoaXMgbWF5IHVwZGF0ZSB2bUVudHJ5RnJhbWUgYW5kIGNhbGxGcmFtZS4KKyAg
ICBIYW5kbGVySW5mbyogaGFuZGxlciA9IHZtLT5pbnRlcnByZXRlci0+dW53aW5kKHZtRW50cnlG
cmFtZSwgY2FsbEZyYW1lLCBleGNlcHRpb24pOyAvLyBUaGlzIG1heSB1cGRhdGUgdm1FbnRyeUZy
YW1lIGFuZCBjYWxsRnJhbWUuCiAKICAgICB2b2lkKiBjYXRjaFJvdXRpbmU7CiAgICAgSW5zdHJ1
Y3Rpb24qIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBWTTsKIAot
dm9pZCBnZW5lcmljVW53aW5kKFZNKiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSBleGNlcHRpb25WYWx1
ZSk7Cit2b2lkIGdlbmVyaWNVbndpbmQoVk0qLCBFeGVjU3RhdGUqKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogCiAj
aW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJh
eS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpAQCAtOTcsNyArOTgsNyBAQCBKSVQ6OkNvZGVSZWYg
SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2CiAjZW5kaWYgLy8gQ1BVKFg4NikKIAogICAgIC8v
IENoZWNrIGZvciBhbiBleGNlcHRpb24KLSAgICBKdW1wIHNhd0V4Y2VwdGlvbiA9IGJyYW5jaDMy
KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmFk
ZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsgCisgICAgSnVtcCBz
YXdFeGNlcHRpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHZtLT5hZGRy
ZXNzT2ZFeGNlcHRpb24oKSksIFRydXN0ZWRJbW0zMigwKSk7CiAKICAgICBlbWl0RnVuY3Rpb25F
cGlsb2d1ZSgpOwogICAgIC8vIFJldHVybi4KQEAgLTgyOSwxMyArODMwLDE5IEBAIHZvaWQgSklU
OjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXIKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIC8vIE5vdyBz
dG9yZSB0aGUgZXhjZXB0aW9uIHJldHVybmVkIGJ5IG9wZXJhdGlvblRocm93LgotICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0gICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWUo
KS5wYXlsb2FkKCkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlKCkudGFnKCkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9u
T2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpLCByZWdUMik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKKworICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0
KCkpKTsKIAogICAgIHVuc2lnbmVkIGV4Y2VwdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgZW1pdFN0b3JlKGV4Y2VwdGlvbiwgcmVnVDEsIHJlZ1QwKTsKKyAgICBl
bWl0U3RvcmUoZXhjZXB0aW9uLCByZWdUMSwgcmVnVDIpOworCisgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDIsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwg
RXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpLCByZWdUMSk7CisKKyAgICB1bnNpZ25lZCB0aHJvd25WYWx1ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgZW1pdFN0b3JlKHRocm93blZhbHVlLCByZWdU
MSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMu
aCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5o
IgpAQCAtNTI5LDYgKzUzMCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9u
KiBjdXIKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSwg
cmVnVDApOwogICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpKSwgQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKworICAg
IGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQ2LDcgKzE4NDYsNyBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3coRXhlY1N0CiAgICAgdm0tPnRocm93
RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKIAogICAgIC8vIFJlc3VsdHMgc3RvcmVk
IG91dC1vZi1iYW5kIGluIHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93LCB2bS5jYWxsRnJhbWVG
b3JUaHJvdyAmIHZtLnZtRW50cnlGcmFtZUZvclRocm93Ci0gICAgZ2VuZXJpY1Vud2luZCh2bSwg
ZXhlYywgZXhjZXB0aW9uVmFsdWUpOworICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwogfQog
CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCkBAIC0xODg1LDExICsxODg1LDcgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluaXRHbG9iYWxDbwogdm9pZCBKSVRfT1BFUkFUSU9OIGxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXIoVk0qIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICBKU1ZhbHVlIGV4Y2Vw
dGlvblZhbHVlID0gdm0tPmV4Y2VwdGlvbigpOwotICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7
Ci0gICAgCi0gICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0aW9uVmFsdWUpOworICAg
IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwogICAgIEFTU0VSVCh2bS0+dGFyZ2V0TWFjaGluZVBD
Rm9yVGhyb3cpOwogfQogCkBAIC0xOTAwLDExICsxODk2LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IGxvb2t1cEV4Y2VwdGlvbkhhbmRsZQogICAgIEFTU0VSVChjYWxsZXJGcmFtZSk7CiAKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIHZtRW50cnlGcmFtZSwg
Y2FsbGVyRnJhbWUpOwotCi0gICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IHZtLT5leGNlcHRp
b24oKTsKLSAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwotICAgIAotICAgIGdlbmVyaWNVbndp
bmQodm0sIGNhbGxlckZyYW1lLCBleGNlcHRpb25WYWx1ZSk7CisgICAgZ2VuZXJpY1Vud2luZCh2
bSwgY2FsbGVyRnJhbWUpOwogICAgIEFTU0VSVCh2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cp
OwogfQogCkBAIC0xOTEyLDggKzE5MDQsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Vk1IYW5kbGVFeGNlCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICBnZW5lcmljVW53aW5kKHZtLCBl
eGVjLCB2bS0+ZXhjZXB0aW9uKCkpOworICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwogfQog
CiAvLyBUaGlzIGZ1bmN0aW9uICJzaG91bGQiIGp1c3QgdGFrZSB0aGUgRXhlY1N0YXRlKiwgYnV0
IGRvaW5nIHNvIHdvdWxkIG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE4NTE4MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQ5LDggKzM0OSw4IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bmF0aXZlRm9yR2UKICNlbHNlCiAgICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgZXhjZXB0aW9uSGFu
ZGxlciA9IGppdC5icmFuY2gzMigKICAgICAgICAgSlNJbnRlcmZhY2VKSVQ6Ok5vdEVxdWFsLAot
ICAgICAgICBKU0ludGVyZmFjZUpJVDo6QWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHZtLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLAotICAgICAgICBKU0ludGVyZmFjZUpJVDo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICAgICAgSlNJbnRlcmZh
Y2VKSVQ6OkFic29sdXRlQWRkcmVzcyh2bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpLAorICAgICAg
ICBKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDApKTsKICNlbmRpZgogCiAgICAgaml0LmVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAkocmV2aXNpb24gMTg1MTgxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDb21tb25TbG93UGF0
aHMuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNs
dWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTg1MTgx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTM3NSw4ICsxMzc1LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3Byb2ZpbGVfZAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2hhbmRsZV9l
eGNlcHRpb24pCiB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7Ci0gICAgQVNTRVJUKHZt
LmV4Y2VwdGlvbigpKTsKLSAgICBnZW5lcmljVW53aW5kKCZ2bSwgZXhlYywgdm0uZXhjZXB0aW9u
KCkpOworICAgIGdlbmVyaWNVbndpbmQoJnZtLCBleGVjKTsKICAgICBMTElOVF9FTkRfSU1QTCgp
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTY5Myw3ICs2OTMsNyBAQCBtYWNybyBicmFuY2hJZkV4Y2VwdGlvbihsYWJl
bCkKICAgICBsb2FkcCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQzCiAgICAgYW5kcCBN
YXJrZWRCbG9ja01hc2ssIHQzCiAgICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fd2Vha1NldCArIFdl
YWtTZXQ6Om1fdm1bdDNdLCB0MwotICAgIGJpZXEgVk06Om1fZXhjZXB0aW9uICsgVGFnT2Zmc2V0
W3QzXSwgRW1wdHlWYWx1ZVRhZywgLm5vRXhjZXB0aW9uCisgICAgYnRpeiBWTTo6bV9leGNlcHRp
b25bdDNdLCAubm9FeGNlcHRpb24KICAgICBqbXAgbGFiZWwKIC5ub0V4Y2VwdGlvbjoKIGVuZApA
QCAtMTk1MiwxNSArMTk1MiwyMCBAQCBfbGxpbnRfb3BfY2F0Y2g6CiAgICAgcmVzdG9yZVN0YWNr
UG9pbnRlckFmdGVyQ2FsbCgpCiAKICAgICBsb2FkaSBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0Zv
clRocm93W3QzXSwgUEMKLSAgICBsb2FkaSBWTTo6bV9leGNlcHRpb24gKyBQYXlsb2FkT2Zmc2V0
W3QzXSwgdDAKLSAgICBsb2FkaSBWTTo6bV9leGNlcHRpb24gKyBUYWdPZmZzZXRbdDNdLCB0MQot
ICAgIHN0b3JlaSAwLCBWTTo6bV9leGNlcHRpb24gKyBQYXlsb2FkT2Zmc2V0W3QzXQotICAgIHN0
b3JlaSBFbXB0eVZhbHVlVGFnLCBWTTo6bV9leGNlcHRpb24gKyBUYWdPZmZzZXRbdDNdCisgICAg
bG9hZGkgVk06Om1fZXhjZXB0aW9uW3QzXSwgdDAKKyAgICBzdG9yZWkgMCwgVk06Om1fZXhjZXB0
aW9uW3QzXQogICAgIGxvYWRpIDRbUENdLCB0MgogICAgIHN0b3JlaSB0MCwgUGF5bG9hZE9mZnNl
dFtjZnIsIHQyLCA4XQorICAgIHN0b3JlaSBDZWxsVGFnLCBUYWdPZmZzZXRbY2ZyLCB0MiwgOF0K
KworICAgIGxvYWRpIEV4Y2VwdGlvbjo6bV92YWx1ZSArIFRhZ09mZnNldFt0MF0sIHQxCisgICAg
bG9hZGkgRXhjZXB0aW9uOjptX3ZhbHVlICsgUGF5bG9hZE9mZnNldFt0MF0sIHQwCisgICAgbG9h
ZGkgOFtQQ10sIHQyCisgICAgc3RvcmVpIHQwLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDIsIDhdCiAg
ICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRbY2ZyLCB0MiwgOF0KKwogICAgIHRyYWNlRXhlY3V0aW9u
KCkgICMgVGhpcyBuZWVkcyB0byBiZSBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBjbG9i
YmVyIHQwLCB0MSwgdDIsIHQzIGFib3ZlLgotICAgIGRpc3BhdGNoKDIpCisgICAgZGlzcGF0Y2go
MykKIAogX2xsaW50X29wX2VuZDoKICAgICB0cmFjZUV4ZWN1dGlvbigpCkBAIC0yMDM4LDcgKzIw
NDMsNyBAQCBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2ZmCiAgICAgZW5k
CiAgICAgCiAgICAgZnVuY3Rpb25FcGlsb2d1ZSgpCi0gICAgYmluZXEgVk06Om1fZXhjZXB0aW9u
ICsgVGFnT2Zmc2V0W3QzXSwgRW1wdHlWYWx1ZVRhZywgLmhhbmRsZUV4Y2VwdGlvbgorICAgIGJ0
aW56IFZNOjptX2V4Y2VwdGlvblt0M10sIC5oYW5kbGVFeGNlcHRpb24KICAgICByZXQKIAogLmhh
bmRsZUV4Y2VwdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTgyMCwxMiArMTgyMCwxOCBAQCBfbGxpbnRfb3BfY2F0Y2g6CiAgICAgbG9h
ZHAgVk06OnRhcmdldEludGVycHJldGVyUENGb3JUaHJvd1t0M10sIFBDCiAgICAgc3VicCBQQiwg
UEMKICAgICByc2hpZnRwIDMsIFBDCisKICAgICBsb2FkcSBWTTo6bV9leGNlcHRpb25bdDNdLCB0
MAogICAgIHN0b3JlcSAwLCBWTTo6bV9leGNlcHRpb25bdDNdCiAgICAgbG9hZGlzRnJvbUluc3Ry
dWN0aW9uKDEsIHQyKQogICAgIHN0b3JlcSB0MCwgW2NmciwgdDIsIDhdCisKKyAgICBsb2FkcSBF
eGNlcHRpb246Om1fdmFsdWVbdDBdLCB0MworICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0
MikKKyAgICBzdG9yZXEgdDMsIFtjZnIsIHQyLCA4XQorCiAgICAgdHJhY2VFeGVjdXRpb24oKQot
ICAgIGRpc3BhdGNoKDIpCisgICAgZGlzcGF0Y2goMykKIAogCiBfbGxpbnRfb3BfZW5kOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJ
KHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNv
bnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MTEsMTAgKzgxMSwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFRyeU5vZGU6OlRyeU5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgU3RhdGVtZW50Tm9kZSogdHJ5QmxvY2ssIGNv
bnN0IElkZW50aWZpZXImIGV4Y2VwdGlvbklkZW50LCBTdGF0ZW1lbnROb2RlKiBjYXRjaEJsb2Nr
LCBTdGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2spCisgICAgaW5saW5lIFRyeU5vZGU6OlRyeU5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgU3RhdGVtZW50Tm9kZSogdHJ5Qmxv
Y2ssIGNvbnN0IElkZW50aWZpZXImIHRocm93blZhbHVlSWRlbnQsIFN0YXRlbWVudE5vZGUqIGNh
dGNoQmxvY2ssIFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jaykKICAgICAgICAgOiBTdGF0ZW1l
bnROb2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1fdHJ5QmxvY2sodHJ5QmxvY2spCi0gICAgICAg
ICwgbV9leGNlcHRpb25JZGVudChleGNlcHRpb25JZGVudCkKKyAgICAgICAgLCBtX3Rocm93blZh
bHVlSWRlbnQodGhyb3duVmFsdWVJZGVudCkKICAgICAgICAgLCBtX2NhdGNoQmxvY2soY2F0Y2hC
bG9jaykKICAgICAgICAgLCBtX2ZpbmFsbHlCbG9jayhmaW5hbGx5QmxvY2spCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTg1MTgxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTExLDcgKzE1MTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7
CiAKICAgICAgICAgU3RhdGVtZW50Tm9kZSogbV90cnlCbG9jazsKLSAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgbV9leGNlcHRpb25JZGVudDsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbV90
aHJvd25WYWx1ZUlkZW50OwogICAgICAgICBTdGF0ZW1lbnROb2RlKiBtX2NhdGNoQmxvY2s7CiAg
ICAgICAgIFN0YXRlbWVudE5vZGUqIG1fZmluYWxseUJsb2NrOwogICAgIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCShyZXZpc2lvbiAxODUxODEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJD
YWxsRGF0YS5oIgogCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJs
ZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgpA
QCAtMzksMTUgKzQwLDE1IEBAIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
ZnUKICAgICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZUNhbGwoZXhlYywgYXNP
YmplY3QoZnVuY3Rpb25PYmplY3QpLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJn
cyk7CiB9CiAKLUpTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb25P
YmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBKU1ZhbHVlKiBleGNlcHRpb24pCitK
U1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxs
VHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgRXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pCiB7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlw
ZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0g
ZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+ZXhj
ZXB0aW9uKCk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuZWRFeGNl
cHRpb24gPSBudWxscHRyOwogICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEu
aAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fs
bERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogbmFtZXNwYWNlIEpTQyB7
CiAKIGNsYXNzIEFyZ0xpc3Q7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiBj
bGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CiBjbGFzcyBKU09iamVjdDsKQEAgLTU4LDcgKzU5LDcg
QEAgdW5pb24gQ2FsbERhdGEgewogfTsKIAogSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxs
KEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlLCBjb25zdCBDYWxs
RGF0YSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1KU19FWFBPUlRfUFJJ
VkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2Fs
bFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
LCBKU1ZhbHVlKiBleGNlcHRpb24pOworSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEV4
ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0
YSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiwgRXhjZXB0aW9uKiYgcmV0dXJu
ZWRFeGNlcHRpb24pOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAi
Q29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgpAQCAtNjAsMTkgKzYxLDE4IEBAIGJvb2wgY2hlY2tT
eW50YXgoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2QKICAgICAgICAgSlNQYXJzZXJTdHJpY3RNb2Rl
OjpOb3RTdHJpY3QsIEpTUGFyc2VyQ29kZVR5cGU6OlByb2dyYW0sIGVycm9yKTsKIH0KIAotSlNW
YWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUqIHJldHVybmVkRXhjZXB0aW9uKQorSlNWYWx1ZSBl
dmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKQogewogICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuYXRvbWlj
U3RyaW5nVGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZtKCkuaXNDb2xsZWN0b3JCdXN5KCkpOworICAgIHJl
dHVybmVkRXhjZXB0aW9uID0gbnVsbHB0cjsKIAogICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShz
b3VyY2UpOwogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0
YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CiAgICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAg
IGlmIChyZXR1cm5lZEV4Y2VwdGlvbikKLSAgICAgICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvbiA9
IGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCk7Ci0KKyAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBl
eGVjLT52bSgpLmV4Y2VwdGlvbigpOwogICAgICAgICBleGVjLT52bSgpLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KQEAgLTgzLDkgKzgzLDcg
QEAgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IAogICAgIEpTVmFsdWUg
cmVzdWx0ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZShwcm9ncmFtLCBleGVjLCB0aGlz
T2JqKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBpZiAocmV0
dXJuZWRFeGNlcHRpb24pCi0gICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb24gPSBleGVjLT5l
eGNlcHRpb24oKTsKLQorICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlv
bigpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21wbGV0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tcGxldGlvbi5oCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21wbGV0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDggQEAKICNp
bmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewotICAgIAorCitjbGFzcyBF
eGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBKU1Njb3BlOwogY2xhc3MgUGFyc2Vy
RXJyb3I7CkBAIC0zNSw3ICszNiwxMiBAQCBjbGFzcyBWTTsKIAogSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBjaGVja1N5bnRheChWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJzZXJFcnJvciYpOwog
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgSlNWYWx1ZSogZXhjZXB0aW9uID0gMCk7Ci1KU19FWFBPUlRfUFJJVkFURSBKU1Zh
bHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IEpTVmFsdWUoKSwgSlNWYWx1ZSogZXhjZXB0aW9uID0gMCk7CitKU19FWFBPUlRfUFJJ
VkFURSBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgRXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pOworaW5saW5lIEpT
VmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlLCBKU1ZhbHVlIHRoaXNWYWx1ZSA9IEpTVmFsdWUoKSkKK3sKKyAgICBFeGNlcHRpb24qIHVu
dXNlZDsKKyAgICByZXR1cm4gZXZhbHVhdGUoZXhlYywgc291cmNlQ29kZSwgdGhpc1ZhbHVlLCB1
bnVzZWQpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvci5oCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBAIEpT
X0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0aHJvd1R5cGVFcnIKIEpTX0VYUE9SVF9QUklWQVRF
IEpTT2JqZWN0KiB0aHJvd1N5bnRheEVycm9yKEV4ZWNTdGF0ZSopOwogCiAvLyBDb252ZW5pZW5j
ZSB3cmFwcGVycywgd3JhcCByZXN1bHQgYXMgYW4gRW5jb2RlZEpTVmFsdWUuCitpbmxpbmUgdm9p
ZCB0aHJvd1ZNRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikgeyBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7IH0KIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSB0aHJvd1ZNRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGVycm9yKSB7
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBl
cnJvcikpOyB9CiBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTVR5cGVFcnJvcihFeGVjU3Rh
dGUqIGV4ZWMpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjKSk7
IH0KIGlubGluZSBFbmNvZGVkSlNWYWx1ZSB0aHJvd1ZNVHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd1R5cGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UpKTsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgorCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEV4
Y2VwdGlvbjo6c19pbmZvID0geyAiRXhjZXB0aW9uIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShFeGNlcHRpb24pIH07CisKK0V4Y2VwdGlvbiogRXhjZXB0aW9uOjpjcmVh
dGUoVk0mIHZtLCBKU1ZhbHVlIHRocm93blZhbHVlKQoreworICAgIEV4Y2VwdGlvbiogcmVzdWx0
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXhjZXB0aW9uPih2bS5oZWFwKSkgRXhjZXB0
aW9uKHZtLCB0aHJvd25WYWx1ZSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBFeGNlcHRpb246OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQoreworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9u
Kj4oY2VsbCk7CisgICAgZXhjZXB0aW9uLT5FeGNlcHRpb246On5FeGNlcHRpb24oKTsKK30KKwor
U3RydWN0dXJlKiBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBFeGNlcHRpb246OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBF
eGNlcHRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXhjZXB0aW9uKj4oY2VsbCk7CisgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICBpZiAoIXRoaXNPYmplY3Qt
Pm1fdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXRoaXNPYmplY3QtPm1fdmFsdWUu
Z2V0KCkuaXNDZWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV92YWx1ZSk7Cit9CisKK0V4Y2VwdGlvbjo6RXhjZXB0aW9uKFZNJiB2bSwgSlNW
YWx1ZSB0aHJvd25WYWx1ZSkKKyAgICA6IEJhc2Uodm0sIHZtLmV4Y2VwdGlvblN0cnVjdHVyZS5n
ZXQoKSkKK3sKKyAgICBtX3ZhbHVlLnNldCh2bSwgdGhpcywgdGhyb3duVmFsdWUpOworCisgICAg
VmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7CisgICAgdm0uaW50ZXJwcmV0ZXItPmdldFN0
YWNrVHJhY2Uoc3RhY2tUcmFjZSk7CisgICAgbV9zdGFjayA9IFJlZkNvdW50ZWRBcnJheTxTdGFj
a0ZyYW1lPihzdGFja1RyYWNlKTsKK30KKworRXhjZXB0aW9uOjp+RXhjZXB0aW9uKCkKK3sKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV4Y2VwdGlvbl9o
CisjZGVmaW5lIEV4Y2VwdGlvbl9oCisKKyNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KKworbmFtZXNwYWNlIEpTQyB7CisgICAgCitjbGFz
cyBFeGNlcHRpb24gOiBwdWJsaWMgSlNPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNP
YmplY3QgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBT
dHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBzdGF0aWMg
RXhjZXB0aW9uKiBjcmVhdGUoVk0mLCBKU1ZhbHVlIHRocm93blZhbHVlKTsKKworICAgIHN0YXRp
YyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IHZhbHVlT2Zmc2V0KCkKKyAgICB7
CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhjZXB0aW9uLCBtX3ZhbHVlKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgRXhjZXB0aW9uKiBjYXN0KEpTVmFsdWUgZXhjZXB0aW9uQXNKU1Zh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxFeGNlcHRpb24qPihleGNlcHRpb25B
c0pTVmFsdWUuYXNDZWxsKCkpOworICAgIH0KKworICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CisgICAgY29uc3QgUmVmQ291bnRlZEFycmF5PFN0YWNr
RnJhbWU+JiBzdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2s7IH0KKworICAgIGJvb2wgZGlk
Tm90aWZ5SW5zcGVjdG9yT2ZUaHJvdygpIGNvbnN0IHsgcmV0dXJuIG1fZGlkTm90aWZ5SW5zcGVj
dG9yT2ZUaHJvdzsgfQorICAgIHZvaWQgc2V0RGlkTm90aWZ5SW5zcGVjdG9yT2ZUaHJvdygpIHsg
bV9kaWROb3RpZnlJbnNwZWN0b3JPZlRocm93ID0gdHJ1ZTsgfQorCisgICAgfkV4Y2VwdGlvbigp
OworCitwcml2YXRlOgorICAgIEV4Y2VwdGlvbihWTSYsIEpTVmFsdWUgdGhyb3duVmFsdWUpOwor
CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmFsdWU7CisgICAgUmVmQ291bnRlZEFycmF5
PFN0YWNrRnJhbWU+IG1fc3RhY2s7CisgICAgYm9vbCBtX2RpZE5vdGlmeUluc3BlY3Rvck9mVGhy
b3cgeyBmYWxzZSB9OworCisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRXhjZXB0aW9uX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
Y3BwCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkVy
cm9ySGFuZGxpbmdTY29wZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNOb3RBbk9iamVjdC5oIgogI2lu
Y2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC01OSwxNyArNjAsMTEgQEAgSlNPYmplY3QqIGNyZWF0
ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcAogICAgIHJldHVybiBUZXJtaW5hdGVkRXhlY3V0aW9u
RXJyb3I6OmNyZWF0ZSgqdm0pOwogfQogCi1ib29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2Vw
dGlvbihKU09iamVjdCogb2JqZWN0KQorYm9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRp
b24oRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7Ci0gICAgcmV0dXJuIG9iamVjdC0+aW5oZXJpdHMo
VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjppbmZvKCkpOworICAgIHJldHVybiBleGNlcHRpb24t
PnZhbHVlKCkuaW5oZXJpdHMoVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjppbmZvKCkpOwogfQog
Ci1ib29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU1ZhbHVlIHZhbHVlKQotewot
ICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cyhUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmluZm8o
KSk7Ci19Ci0KLQogSlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZC4iKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCShyZXZpc2lvbiAx
ODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0eXBl
ZGVmIEpTT2JqZWN0KiAoKkVycm9yRmFjdG9yeSkoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwg
RXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIpOwogCiBKU09iamVjdCogY3JlYXRlVGVybWlu
YXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihWTSopOwotYm9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25F
eGNlcHRpb24oSlNPYmplY3QqKTsKLUpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNUZXJtaW5hdGVk
RXhlY3V0aW9uRXhjZXB0aW9uKEpTVmFsdWUpOworSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1Rl
cm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oRXhjZXB0aW9uKik7CiBKU19FWFBPUlRfUFJJVkFU
RSBKU09iamVjdCogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgU3RyaW5n
JiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIpOwogSlNfRVhQT1JUX1BSSVZBVEUgSlNP
YmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqKTsKIEpTT2JqZWN0KiBj
cmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVy
LmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1
ZGUgIkdldHRlclNldHRlci5oIgogCiAjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb24uaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNzUsNyArNzYsNyBAQCBKU1ZhbHVlIGNh
bGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgLy8gRklYTUU6IFNvbWUgY2FsbGVy
cyBtYXkgaW52b2tlIGdldCgpIHdpdGhvdXQgY2hlY2tpbmcgZm9yIGFuIGV4Y2VwdGlvbiBmaXJz
dC4KICAgICAvLyBXZSB3b3JrIGFyb3VuZCB0aGF0IGJ5IGNoZWNraW5nIGhlcmUuCiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gZXhlYy0+ZXhjZXB0aW9uKCk7
CisgICAgICAgIHJldHVybiBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKTsKIAogICAgIEpTT2Jq
ZWN0KiBnZXR0ZXIgPSBqc0Nhc3Q8R2V0dGVyU2V0dGVyKj4oZ2V0dGVyU2V0dGVyKS0+Z2V0dGVy
KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRl
cmF0b3JPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODksNyArODksNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yU3RlcChFeGVjU3RhdGUqIGV4ZWMsIEpTCiAK
IHZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgaXRlcmF0b3IpCiB7
Ci0gICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBudWxs
cHRyOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBleGNlcHRpb24g
PSBleGVjLT5leGNlcHRpb24oKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKQEAg
LTk5LDcgKzk5LDcgQEAgdm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAocmV0dXJuRnVuY3Rpb24uaXNVbmRlZmluZWQoKSkg
ewotICAgICAgICBpZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIGlmIChleGNlcHRp
b24pCiAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBpdGVy
YXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIENhbGxEYXRhIHJldHVybkZ1bmN0
aW9uQ2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgcmV0dXJuRnVuY3Rpb25DYWxsVHlwZSA9IGdldENh
bGxEYXRhKHJldHVybkZ1bmN0aW9uLCByZXR1cm5GdW5jdGlvbkNhbGxEYXRhKTsKICAgICBpZiAo
cmV0dXJuRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKLSAgICAgICAgaWYgKCFl
eGNlcHRpb24uaXNFbXB0eSgpKQorICAgICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICAgICAg
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKQEAgLTExNyw3ICsxMTcsNyBAQCB2
b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgcmV0dXJuRnVuY3Rpb25Bcmd1bWVudHM7CiAgICAgSlNWYWx1ZSBpbm5lclJlc3Vs
dCA9IGNhbGwoZXhlYywgcmV0dXJuRnVuY3Rpb24sIHJldHVybkZ1bmN0aW9uQ2FsbFR5cGUsIHJl
dHVybkZ1bmN0aW9uQ2FsbERhdGEsIGl0ZXJhdG9yLCByZXR1cm5GdW5jdGlvbkFyZ3VtZW50cyk7
CiAKLSAgICBpZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpIHsKKyAgICBpZiAoZXhjZXB0aW9uKSB7
CiAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRhdGVQcm90b3R5cGUu
aCIKICNpbmNsdWRlICJFcnJvckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgi
CiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2lu
Y2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KFBST01JU0VTKQogCiAjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIK
ICNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKQEAgLTEzNiw3ICsxMzcsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKICAgICAvLyAxNC4gSWYg
cmVzdWx0IGlzIGFuIGFicnVwdCBjb21wbGV0aW9uLCBjYWxsIFByb21pc2VSZWplY3QocHJvbWlz
ZSwgcmVzdWx0LltbdmFsdWVdXSkuCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0g
ICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIEpT
VmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7CiAgICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KHZtLCBleGNl
cHRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVm
ZXJyZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvbWlzZURlZmVycmVkLmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFBST01JU0VTKQogCiAjaW5jbHVkZSAiRXJyb3IuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb21pc2UuaCIKQEAgLTE1
MCw3ICsxNTEsNyBAQCBUaGVuYWJsZVN0YXR1cyB1cGRhdGVEZWZlcnJlZEZyb21Qb3RlbnRpCiAg
ICAgICAgIC8vIGkuIExldCAncmVqZWN0UmVzdWx0JyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcg
dGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZgogICAgICAgICAvLyAgICBkZWZlcnJlZC5b
W1JlamVjdF1dIHdpdGggdW5kZWZpbmVkIGFzIHRoaXNBcmd1bWVudCBhbmQgYSBMaXN0IGNvbnRh
aW5pbmcKICAgICAgICAgLy8gICAgdGhlbi5bW3ZhbHVlXV0gYXMgYXJndW1lbnRzTGlzdC4KLSAg
ICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgSlNW
YWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKTsKICAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAgICAgICBwZXJmb3JtRGVmZXJyZWRSZWplY3QoZXhl
YywgZGVmZXJyZWQsIGV4Y2VwdGlvbik7CkBAIC0xODUsNyArMTg2LDcgQEAgVGhlbmFibGVTdGF0
dXMgdXBkYXRlRGVmZXJyZWRGcm9tUG90ZW50aQogICAgICAgICAvLyBpLiBMZXQgJ3JlamVjdFJl
c3VsdCcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRo
b2Qgb2YKICAgICAgICAgLy8gICAgZGVmZXJyZWQuW1tSZWplY3RdXSB3aXRoIHVuZGVmaW5lZCBh
cyB0aGlzQXJndW1lbnQgYW5kIGEgTGlzdCBjb250YWluaW5nCiAgICAgICAgIC8vICAgIHRoZW5D
YWxsUmVzdWx0LltbdmFsdWVdXSBhcyBhcmd1bWVudHNMaXN0LgotICAgICAgICBKU1ZhbHVlIGV4
Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9
IGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1ZSgpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOwogCiAgICAgICAgIHBlcmZvcm1EZWZlcnJlZFJlamVjdChleGVjLCBkZWZlcnJlZCwgZXhj
ZXB0aW9uKTsKQEAgLTIyOCw3ICsyMjksNyBAQCB2b2lkIHBlcmZvcm1EZWZlcnJlZFJlamVjdChF
eGVjU3RhdGUqIGV4CiBKU1ZhbHVlIGFicnVwdFJlamVjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
UHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCkKIHsKICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOwotICAgIEpTVmFsdWUgYXJndW1lbnQgPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICBK
U1ZhbHVlIGFyZ3VtZW50ID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7CiAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKIAogICAgIC8vIGkuIExldCAncmVqZWN0UmVzdWx0JyBiZSB0aGUg
cmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUmVhY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVJlYWN0aW9uLmNw
cAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9taXNlUmVhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYg
RU5BQkxFKFBST01JU0VTKQogCiAjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElu
bGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgpAQCAtODgsNyArODksNyBAQCB2
b2lkIEV4ZWN1dGVQcm9taXNlUmVhY3Rpb25NaWNyb3Rhc2s6OnJ1CiAgICAgLy8gICAgW1tDYWxs
XV0gaW50ZXJuYWwgbWV0aG9kIG9mIGRlZmVycmVkLltbUmVqZWN0XV0gcGFzc2luZyB1bmRlZmlu
ZWQgYXMgdGhpc0FyZ3VtZW50CiAgICAgLy8gICAgYW5kIGEgTGlzdCBjb250YWluaW5nIGhhbmRs
ZXJSZXN1bHQuW1t2YWx1ZV1dIGFzIGFyZ3VtZW50c0xpc3QuCiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9u
KCk7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVl
KCk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgcGVyZm9ybURl
ZmVycmVkUmVqZWN0KGV4ZWMsIGRlZmVycmVkLCBleGNlcHRpb24pOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBA
CiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNp
bmNsdWRlICJFcnJvckluc3RhbmNlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVk
ZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtMjM1LDYgKzIzNiw3IEBAIFZNOjpWTShWTVR5
cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICB3ZWFrTWFwRGF0YVN0cnVjdHVyZS5z
ZXQoKnRoaXMsIFdlYWtNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CiAgICAgaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVmFsdWU6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBmdW5jdGlvblJhcmVE
YXRhU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGV4Y2VwdGlvblN0cnVjdHVyZS5zZXQoKnRoaXMs
IEV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2lmIEVO
QUJMRShQUk9NSVNFUykKICAgICBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBK
U1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwog
ICAgIHByb21pc2VSZWFjdGlvblN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJvbWlzZVJlYWN0aW9u
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkBAIC01NDUsNyArNTQ3LDcg
QEAgdm9pZCBWTTo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKQogICAgIGhlYXAuY29sbGVjdEFs
bEdhcmJhZ2UoKTsKIH0KIAotSlNWYWx1ZSBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGVycm9yKQordm9pZCBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKIHsKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRo
cm93KCkpIHsKICAgICAgICAgZGF0YUxvZygiSW4gY2FsbCBmcmFtZSAiLCBSYXdQb2ludGVyKGV4
ZWMpLCAiIGZvciBjb2RlIGJsb2NrICIsICpleGVjLT5jb2RlQmxvY2soKSwgIlxuIik7CkBAIC01
NTMsMzcgKzU1NSwyNCBAQCBKU1ZhbHVlIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
CiAgICAgfQogICAgIAogICAgIEFTU0VSVChleGVjID09IHRvcENhbGxGcmFtZSB8fCBleGVjID09
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpIHx8IGV4ZWMgPT0gZXhl
Yy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpOwotICAgIAotICAgIFZlY3Rv
cjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwotICAgIGludGVycHJldGVyLT5nZXRTdGFja1RyYWNl
KHN0YWNrVHJhY2UpOwotICAgIG1fZXhjZXB0aW9uU3RhY2sgPSBSZWZDb3VudGVkQXJyYXk8U3Rh
Y2tGcmFtZT4oc3RhY2tUcmFjZSk7Ci0gICAgbV9leGNlcHRpb24gPSBlcnJvcjsKLQotICAgIHJl
dHVybiBlcnJvcjsKLX0KLSAgICAKLUpTT2JqZWN0KiBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogZXJyb3IpCi17Ci0gICAgcmV0dXJuIGFzT2JqZWN0KHRocm93
RXhjZXB0aW9uKGV4ZWMsIEpTVmFsdWUoZXJyb3IpKSk7Ci19Ci12b2lkIFZNOjpnZXRFeGNlcHRp
b25JbmZvKEpTVmFsdWUmIGV4Y2VwdGlvbiwgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+JiBl
eGNlcHRpb25TdGFjaykKLXsKLSAgICBleGNlcHRpb24gPSBtX2V4Y2VwdGlvbjsKLSAgICBleGNl
cHRpb25TdGFjayA9IG1fZXhjZXB0aW9uU3RhY2s7Ci19Ci12b2lkIFZNOjpzZXRFeGNlcHRpb25J
bmZvKEpTVmFsdWUmIGV4Y2VwdGlvbiwgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+JiBleGNl
cHRpb25TdGFjaykKLXsKLSAgICBtX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKLSAgICBtX2V4Y2Vw
dGlvblN0YWNrID0gZXhjZXB0aW9uU3RhY2s7CisgICAgc2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7
CiB9CiAKLXZvaWQgVk06OmNsZWFyRXhjZXB0aW9uKCkKK0pTVmFsdWUgVk06OnRocm93RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aHJvd25WYWx1ZSkKIHsKLSAgICBtX2V4Y2Vw
dGlvbiA9IEpTVmFsdWUoKTsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKKyAgICBpZiAodGhy
b3duVmFsdWUuaXNDZWxsKCkgJiYgdGhyb3duVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09
IGV4Y2VwdGlvblN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgZXhjZXB0aW9uID0ganNDYXN0PEV4
Y2VwdGlvbio+KHRocm93blZhbHVlLmFzQ2VsbCgpKTsKKyAgICBlbHNlCisgICAgICAgIGV4Y2Vw
dGlvbiA9IEV4Y2VwdGlvbjo6Y3JlYXRlKCp0aGlzLCB0aHJvd25WYWx1ZSk7CisKKyAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOworICAgIHJldHVybiBKU1ZhbHVlKGV4Y2VwdGlv
bik7CiB9Ci12b2lkIFZNOjogY2xlYXJFeGNlcHRpb25TdGFjaygpCisKK0pTT2JqZWN0KiBWTTo6
dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZXJyb3IpCiB7Ci0gICAg
bV9leGNlcHRpb25TdGFjayA9IFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPigpOworICAgIHJl
dHVybiBhc09iamVjdCh0aHJvd0V4Y2VwdGlvbihleGVjLCBKU1ZhbHVlKGVycm9yKSkpOwogfQog
CiB2b2lkIFZNOjpzZXRTdGFja1BvaW50ZXJBdFZNRW50cnkodm9pZCogc3ApCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDYgQEAK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+CiAj
aW5jbHVkZSA8d3RmL1NpbXBsZVN0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNrQm91bmRzLmg+
CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CkBAIC03OCw2ICs3Nyw3IEBA
IGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNoZTsKIGNsYXNzIENvbW1vbklkZW50aWZp
ZXJzOwogY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgRXhjZXB0aW9uOwogY2xhc3MgSGFuZGxlU3Rh
Y2s7CiBjbGFzcyBUeXBlUHJvZmlsZXI7CiBjbGFzcyBUeXBlUHJvZmlsZXJMb2c7CkBAIC0yNzQs
NiArMjc0LDcgQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYWtNYXBEYXRhU3Ry
dWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVmFsdWVTdHJ1Y3R1cmU7CiAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZTsKKyAgICBTdHJv
bmc8U3RydWN0dXJlPiBleGNlcHRpb25TdHJ1Y3R1cmU7CiAjaWYgRU5BQkxFKFBST01JU0VTKQog
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VEZWZlcnJlZFN0cnVjdHVyZTsKICAgICBTdHJv
bmc8U3RydWN0dXJlPiBwcm9taXNlUmVhY3Rpb25TdHJ1Y3R1cmU7CkBAIC0zNzIsMTQgKzM3Mywx
MyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRhcmdldE1h
Y2hpbmVQQ0ZvclRocm93KTsKICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNs
ZWFyRXhjZXB0aW9uKCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhckV4Y2VwdGlv
blN0YWNrKCk7Ci0gICAgdm9pZCBnZXRFeGNlcHRpb25JbmZvKEpTVmFsdWUmIGV4Y2VwdGlvbiwg
UmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+JiBleGNlcHRpb25TdGFjayk7Ci0gICAgdm9pZCBz
ZXRFeGNlcHRpb25JbmZvKEpTVmFsdWUmIGV4Y2VwdGlvbiwgUmVmQ291bnRlZEFycmF5PFN0YWNr
RnJhbWU+JiBleGNlcHRpb25TdGFjayk7Ci0gICAgSlNWYWx1ZSBleGNlcHRpb24oKSBjb25zdCB7
IHJldHVybiBtX2V4Y2VwdGlvbjsgfQotICAgIEpTVmFsdWUqIGFkZHJlc3NPZkV4Y2VwdGlvbigp
IHsgcmV0dXJuICZtX2V4Y2VwdGlvbjsgfQotICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxTdGFj
a0ZyYW1lPiYgZXhjZXB0aW9uU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvblN0YWNr
OyB9CisgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSBudWxscHRyOyB9
CisgICAgdm9pZCBzZXRFeGNlcHRpb24oRXhjZXB0aW9uKiBleGNlcHRpb24pIHsgbV9leGNlcHRp
b24gPSBleGNlcHRpb247IH0KIAorICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9leGNlcHRpb247IH0KKyAgICBKU0NlbGwqKiBhZGRyZXNzT2ZFeGNlcHRpb24oKSB7
IHJldHVybiByZWludGVycHJldF9jYXN0PEpTQ2VsbCoqPigmbV9leGNlcHRpb24pOyB9CisKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEV4Y2Vw
dGlvbiopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdGhyb3dFeGNlcHRpb24oRXhl
Y1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93
RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiAKQEAgLTU2OSwxMiArNTY5LDExIEBA
IHByaXZhdGU6CiAjZW5kaWYKICNlbmRpZgogICAgIHZvaWQqIG1fbGFzdFN0YWNrVG9wOwotICAg
IEpTVmFsdWUgbV9leGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBtX2V4Y2VwdGlvbiB7IG51bGxw
dHIgfTsKICAgICBib29sIG1faW5EZWZpbmVPd25Qcm9wZXJ0eTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICBMZWdhY3lQcm9maWxlciogbV9lbmFibGVk
UHJvZmlsZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ1aWx0aW5FeGVjdXRhYmxlcz4gbV9idWls
dGluRXhlY3V0YWJsZXM7Ci0gICAgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+IG1fZXhjZXB0
aW9uU3RhY2s7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxXYXRjaHBvaW50U2V0Pj4gbV9p
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnRTZXRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJv
ZmlsZXI+IG1fdHlwZVByb2ZpbGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsZXJM
b2c+IG1fdHlwZVByb2ZpbGVyTG9nOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk1FbnRyeVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw5ICs0OSw2IEBAIFZNRW50cnlTY29wZTo6Vk1FbnRyeVNjb3BlKFZNJiB2bSwgSlNHbG8KICAg
ICAgICAgLy8gb2JzZXJ2ZSB0aW1lIHhvbmUgY2hhbmdlcy4KICAgICAgICAgdm0ucmVzZXREYXRl
Q2FjaGUoKTsKICAgICB9Ci0KLSAgICAvLyBDbGVhciB0aGUgY2FwdHVyZWQgZXhjZXB0aW9uIHN0
YWNrIGJldHdlZW4gZW50cmllcwotICAgIHZtLmNsZWFyRXhjZXB0aW9uU3RhY2soKTsKIH0KIAog
dm9pZCBWTUVudHJ5U2NvcGU6OnNldEVudHJ5U2NvcGVEaWRQb3BMaXN0ZW5lcih2b2lkKiBrZXks
IEVudHJ5U2NvcGVEaWRQb3BMaXN0ZW5lciBsaXN0ZW5lcikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDgxIEBACisyMDE1LTA2LTAzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBmaW5hbGx5IGJsb2NrcyBzaG91bGQgbm90IHNldCB0aGUgZXhjZXB0aW9u
IHN0YWNrIHRyYWNlIHdoZW4gcmUtdGhyb3dpbmcgdGhlIGV4Y2VwdGlvbi4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTUyNQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0byB1c2UgdGhlIG5l
dyBKU0M6OkV4Y2VwdGlvbiBvYmplY3QuCisKKyAgICAgICAgVGVzdDogaW5zcGVjdG9yL2RlYnVn
Z2VyL2JyZWFrLW9uLWV4Y2VwdGlvbnMuaHRtbAorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9FeGNlcHRpb24uaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlND
YWxsYmFja0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDYWxsYmFja0RhdGE6Omludm9r
ZUNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3Vw
TmFtZXNwYWNlVVJJKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6anNBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRFeGNl
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0Q3VycmVudEV4Y2VwdGlvbik6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNFcnJvckhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFcnJvckhhbmRsZXI6Omhh
bmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZGlkTGVhdmVTY3JpcHRDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmZ1bmN0aW9uQ2FsbEhhbmRsZXJGcm9tQW55VGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OmV2YWx1YXRlSGFuZGxlckZyb21BbnlUaHJlYWQpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpjYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWFpblRocmVhZEV4
ZWNTdGF0ZTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNNYWluVGhyZWFkRXhlY1N0
YXRlOjpydW5UYXNrKToKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVkaWFEZXZpY2VzQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVkaWFEZXZpY2VzOjpnZXRVc2VyTWVkaWEp
OgorICAgICAgICAtIEZpeGVkIGEgYnVnIHdoZXJlIHRoZSBleGNlcHRpb24gd2FzIG5vdCBjbGVh
cmVkIGJlZm9yZSBlbnRlcmluZyB0aGUgVk0gdG8KKyAgICAgICAgICBjYWxsIEpTIGNvZGUuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNNdXRhdGlvbkNhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9SZWFkYWJsZUpTU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFByb3BlcnR5RnJv
bU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxsRnVuY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVhZGFibGVKU1N0cmVhbTo6U291cmNlOjpzdGFydCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFj
dGlvbjo6ZXhlY3V0ZUZ1bmN0aW9uSW5Db250ZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmV2YWx1YXRlSW5Xb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxp
emUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6c2V0RXhjZXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNjaGVkdWxlRXhlY3V0aW9u
VGVybWluYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6Ondvcmtlckds
b2JhbFNjb3BlV3JhcHBlcik6CisgICAgICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6
OnJ1bkV2ZW50TG9vcFdoaWxlUGF1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlw
dERlYnVnU2VydmVyOjpyZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dv
cmtlclNjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9XZWJTY3Jp
cHRPYmplY3QubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVKU1dyYXBwZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6YWRkRXhjZXB0aW9uVG9Db25zb2xlKToKKyAgICAgICAgKC1bV2ViU2NyaXB0
T2JqZWN0IGNhbGxXZWJTY3JpcHRNZXRob2Q6d2l0aEFyZ3VtZW50czpdKToKKyAgICAgICAgKC1b
V2ViU2NyaXB0T2JqZWN0IGV2YWx1YXRlV2ViU2NyaXB0Ol0pOgorICAgICAgICAtIENoYW5nZWQg
dG8gY2FsbCBhIHZlcnNpb24gb2YgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZSgpIHRo
YXQgcHJvdmlkZXMKKyAgICAgICAgICBhIHN0dWIgcmV0dXJuZWRFeGNlcHRpb24gYmVjYXVzZSBl
dmFsdWF0ZVdlYlNjcmlwdDogZG9lc24ndCBuZWVkIHRoZSBleGNlcHRpb24uCisKKyAgICAgICAg
KiBpbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6aXNDb250ZW50U2NyaXB0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICogd29ya2Vycy9Xb3Jr
ZXJHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6
aW1wb3J0U2NyaXB0cyk6CisKIDIwMTUtMDYtMDMgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQG5h
dmVyY29ycC5jb20+CiAKICAgICAgICAgW0Nvb3JkaW5hdGVkR3JhcGhpY3NdIE1lcmdlIENvb3Jk
aW5hdGVkVGlsZSBpbnRvIFRpbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3J1bnRpbWUvRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9FeGNlcHRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0V4Y2VwdGlvbl9oCisj
ZGVmaW5lIFdlYkNvcmVfRldEX0V4Y2VwdGlvbl9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
RXhjZXB0aW9uLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2FsbGJhY2tEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NhbGxiYWNrRGF0YS5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAg
KzczLDEwIEBAIEpTVmFsdWUgSlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKEoKIAogICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBKU01haW5UaHJlYWRFeGVj
U3RhdGU6Omluc3RydW1lbnRGdW5jdGlvbkNhbGwoY29udGV4dCwgY2FsbFR5cGUsIGNhbGxEYXRh
KTsKIAotICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0gY29udGV4dC0+aXNEb2N1bWVudCgpCi0gICAgICAgID8gSlNN
YWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIHRoaXNWYWx1ZSwgYXJncywgJmV4Y2VwdGlvbikKLSAgICAgICAgOiBKU0M6OmNhbGwoZXhl
YywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCAmZXhjZXB0
aW9uKTsKKyAgICAgICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pCisgICAg
ICAgIDogSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNW
YWx1ZSwgYXJncywgZXhjZXB0aW9uKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkQ2FsbEZ1bmN0aW9uKGNvb2tpZSwgY29udGV4dCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBh
dGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsOCArOTMsOCBAQCBTdHJpbmcg
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hCiAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBwcmVmaXgp
KTsKIAotICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgIEpTVmFsdWUgcmV0dmFsID0gSlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEs
IG1fY3VzdG9tUmVzb2x2ZXIuZ2V0KCksIGFyZ3MsICZleGNlcHRpb24pOworICAgIEV4Y2VwdGlv
biogZXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmV0dmFsID0gSlNNYWluVGhyZWFkRXhlY1N0YXRl
OjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIG1fY3VzdG9tUmVzb2x2
ZXIuZ2V0KCksIGFyZ3MsIGV4Y2VwdGlvbik7CiAKICAgICBTdHJpbmcgcmVzdWx0OwogICAgIGlm
IChleGNlcHRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNs
dWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4K
ICNpbmNsdWRlIDxydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvRXhjZXB0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CkBAIC0x
MzgsNyArMTM5LDcgQEAgSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZQog
ICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCwgbGlz
dCk7CiB9CiAKLXZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBl
eGNlcHRpb24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQordm9pZCByZXBvcnRFeGNlcHRp
b24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBj
YWNoZWRTY3JpcHQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5jdXJyZW50VGhy
ZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhj
ZXB0aW9uKGV4Y2VwdGlvbikpCkBAIC0xNDgsNyArMTQ5LDYgQEAgdm9pZCByZXBvcnRFeGNlcHRp
b24oRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2Fs
bFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
LCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpKTsKICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwotICAgIGV4ZWMtPmNsZWFyU3VwcGxlbWVudGFyeUV4Y2VwdGlv
bkluZm8oKTsKIAogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIGlm
IChKU0RPTVdpbmRvdyogd2luZG93ID0ganNEeW5hbWljQ2FzdDxKU0RPTVdpbmRvdyo+KGdsb2Jh
bE9iamVjdCkpIHsKQEAgLTE2NiwxNCArMTY2LDEzIEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlMKICAgICB9CiAKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAg
IGlmIChFeGNlcHRpb25CYXNlKiBleGNlcHRpb25CYXNlID0gdG9FeGNlcHRpb25CYXNlKGV4Y2Vw
dGlvbikpCisgICAgaWYgKEV4Y2VwdGlvbkJhc2UqIGV4Y2VwdGlvbkJhc2UgPSB0b0V4Y2VwdGlv
bkJhc2UoZXhjZXB0aW9uLT52YWx1ZSgpKSkKICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXhjZXB0
aW9uQmFzZS0+bWVzc2FnZSgpICsgIjogIiAgKyBleGNlcHRpb25CYXNlLT5kZXNjcmlwdGlvbigp
OwogICAgIGVsc2UgewogICAgICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1
MDg3PiBXZWIgSW5zcGVjdG9yOiBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24gc2hvdWxkIG5vdCBl
dmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKICAgICAgICAgLy8gSWYgdGhp
cyBpcyBhIGN1c3RvbiBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRvIHRy
eSBhbmQgZ2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRpb24u
Ci0gICAgICAgIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0g
ICAgICAgIGV4ZWMtPmNsZWFyU3VwcGxlbWVudGFyeUV4Y2VwdGlvbkluZm8oKTsKICAgICB9CiAK
ICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2xv
YmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CkBAIC0xODIsNyArMTgxLDcgQEAg
dm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogCiB2b2lkIHJlcG9ydEN1
cnJlbnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUgZXhjZXB0aW9u
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBleGVjLT5l
eGNlcHRpb24oKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJlcG9ydEV4Y2Vw
dGlvbihleGVjLCBleGNlcHRpb24pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNyArMjQ3LDcg
QEAgdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbgogCiBjb25zdCBKU0M6
Okhhc2hUYWJsZSYgZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShKU0M6OlZNJiwgY29uc3QgSlND
OjpIYXNoVGFibGUmIHN0YXRpY1RhYmxlKTsKIAotV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRF
eGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBDYWNoZWRT
Y3JpcHQqID0gbnVsbHB0cik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIp
Owogdm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiAKIEpTQzo6
SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBFeGNlcHRpb25Db2Rl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5j
cHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJy
b3JIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsMTAgKzk4LDEwIEBAIHZvaWQgSlNF
cnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEUKICAgICAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgdm0uZW50
cnlTY29wZSA/IHZtLmVudHJ5U2NvcGUtPmdsb2JhbE9iamVjdCgpIDogZ2xvYmFsT2JqZWN0KTsK
IAotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRp
b247CiAgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5pc0RvY3VtZW50KCkKLSAgICAgICAgICAgID8gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxs
KGV4ZWMsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdz
LCAmZXhjZXB0aW9uKQotICAgICAgICAgICAgOiBKU0M6OmNhbGwoZXhlYywganNGdW5jdGlvbiwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ3MsICZleGNlcHRpb24pOworICAg
ICAgICAgICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywganNGdW5jdGlvbiwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ3MsIGV4Y2VwdGlvbikKKyAgICAg
ICAgICAgIDogSlNDOjpjYWxsKGV4ZWMsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwg
Z2xvYmFsT2JqZWN0LCBhcmdzLCBleGNlcHRpb24pOwogCiAgICAgICAgIGdsb2JhbE9iamVjdC0+
c2V0Q3VycmVudEV2ZW50KHNhdmVkRXZlbnQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNCwxMCArMTI0LDEwIEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVu
dChTY3JpcHQKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9
IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9uQ2FsbChzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwogCiAgICAgICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gaGFuZGxlRXZlbnRGdW5jdGlvbiA9PSBqc0Z1bmN0aW9uID8gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIGV2ZW50LT5jdXJyZW50VGFyZ2V0KCkpIDoganNGdW5jdGlvbjsKLSAgICAg
ICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uOwogICAg
ICAgICBKU1ZhbHVlIHJldHZhbCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQo
KQotICAgICAgICAgICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgaGFuZGxl
RXZlbnRGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsICZleGNl
cHRpb24pCi0gICAgICAgICAgICA6IEpTQzo6Y2FsbChleGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgJmV4Y2VwdGlvbik7CisgICAg
ICAgICAgICA/IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBoYW5kbGVFdmVudEZ1
bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgZXhjZXB0aW9uKQor
ICAgICAgICAgICAgOiBKU0M6OmNhbGwoZXhlYywgaGFuZGxlRXZlbnRGdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIGV4Y2VwdGlvbik7CiAKICAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NiwxOCArNDYsMTggQEAgdm9pZCBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmRp
ZExlYXZlU2NyaQogICAgIE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXJBbGxNdXRhdGlvbnMoKTsK
IH0KIAotSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uQ2FsbEhhbmRsZXJGcm9tQW55VGhyZWFkKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5
cGUgY2FsbFR5cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUg
dGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIEpTQzo6SlNWYWx1ZSogZXhjZXB0
aW9uKQorSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uQ2FsbEhhbmRsZXJGcm9tQW55VGhyZWFkKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5
cGUgY2FsbFR5cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUg
dGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIEpTQzo6RXhjZXB0aW9uKiYgcmV0
dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgaWYgKGlzTWFpblRocmVhZCgpKQotICAgICAgICByZXR1
cm4gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxs
VHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgZXhjZXB0aW9uKTsKLSAgICByZXR1cm4g
SlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNW
YWx1ZSwgYXJncywgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTTWFpblRocmVhZEV4ZWNT
dGF0ZTo6Y2FsbChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlz
VmFsdWUsIGFyZ3MsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICByZXR1cm4gSlNDOjpjYWxsKGV4
ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywg
cmV0dXJuZWRFeGNlcHRpb24pOwogfQogCi1KU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5kbGVyRnJv
bUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKQor
SlNDOjpKU1ZhbHVlIGV2YWx1YXRlSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1Zh
bHVlLCBKU0M6OkV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKQogewogICAgIGlmIChpc01h
aW5UaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVh
dGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuIEpTQzo6
ZXZhbHVhdGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIGV4Y2VwdGlvbik7CisgICAgICAgIHJl
dHVybiBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZSwgdGhpc1Zh
bHVlLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgcmV0dXJuIEpTQzo6ZXZhbHVhdGUoZXhlYywg
c291cmNlLCB0aGlzVmFsdWUsIHJldHVybmVkRXhjZXB0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmgJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCwxNiArNTAsMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc19tYWluVGhyZWFkU3RhdGU7
CiAgICAgfTsKICAgICAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNhbGwoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxs
VHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFs
dWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjYWxsKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpT
VmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IEpTQzo6
Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFy
Z0xpc3QmIGFyZ3MsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pCiAgICAgewog
ICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGUgY3VycmVudFN0YXRlKGV4ZWMpOwotICAgICAg
ICByZXR1cm4gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERh
dGEsIHRoaXNWYWx1ZSwgYXJncywgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y2Fs
bChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFy
Z3MsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICB9OwogCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKQor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZXZhbHVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6
OkV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKQogICAgIHsKICAgICAgICAgSlNNYWluVGhy
ZWFkRXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShleGVjKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6ZXZh
bHVhdGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVy
biBKU0M6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZSwgdGhpc1ZhbHVlLCByZXR1cm5lZEV4Y2VwdGlv
bik7CisgICAgfTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZXZhbHVhdGUoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBKU0M6OkpTVmFsdWUg
dGhpc1ZhbHVlID0gSlNDOjpKU1ZhbHVlKCkpCisgICAgeworICAgICAgICBKU0M6OkV4Y2VwdGlv
biogdW51c2VkOworICAgICAgICByZXR1cm4gZXZhbHVhdGUoZXhlYywgc291cmNlLCB0aGlzVmFs
dWUsIHVudXNlZCk7CiAgICAgfTsKIAogICAgIHN0YXRpYyB2b2lkIHJ1blRhc2soSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTQzo6TWljcm90YXNrJiB0YXNrKQpAQCAtMTIxLDggKzEyNyw4IEBAIHBy
aXZhdGU6CiAgICAgSlNDOjpFeGVjU3RhdGUqIG1fcHJldmlvdXNTdGF0ZTsKIH07CiAKLUpTQzo6
SlNWYWx1ZSBmdW5jdGlvbkNhbGxIYW5kbGVyRnJvbUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSwgY29uc3QgSlNDOjpD
YWxsRGF0YSYsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJn
cywgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pOwotSlNDOjpKU1ZhbHVlIGV2YWx1YXRlSGFuZGxl
ckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmLCBK
U0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbik7CitKU0M6OkpT
VmFsdWUgZnVuY3Rpb25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUsIGNvbnN0IEpTQzo6Q2Fs
bERhdGEmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3Ms
IEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pOworSlNDOjpKU1ZhbHVlIGV2YWx1
YXRlSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJj
ZUNvZGUmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkV4Y2VwdGlvbiomIHJldHVybmVk
RXhjZXB0aW9uKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01lZGlhRGV2aWNlc0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYURldmljZXNDdXN0b20uY3BwCShyZXZp
c2lvbiAxODUxODEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhRGV2aWNl
c0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJK
U0RPTVByb21pc2UuaCIKICNpbmNsdWRlICJKU01lZGlhU3RyZWFtLmgiCiAjaW5jbHVkZSAiSlNO
YXZpZ2F0b3JVc2VyTWVkaWFFcnJvci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTUwLDcgKzUxLDkgQEAgSlNWYWx1ZSBKU01l
ZGlhRGV2aWNlczo6Z2V0VXNlck1lZGlhKEV4ZQogCiAgICAgRGljdGlvbmFyeSBvcHRpb25zKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
LSAgICAgICAgd3JhcHBlci5yZWplY3QoZXhlYy0+ZXhjZXB0aW9uKCkpOworICAgICAgICBFeGNl
cHRpb24qIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgICAgICB3cmFwcGVyLnJlamVjdChleGNlcHRpb24tPnZhbHVlKCkp
OwogICAgICAgICByZXR1cm4gd3JhcHBlci5wcm9taXNlKCk7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFjay5jcHAJKHJl
dmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25D
YWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDggKzg3LDggQEAgdm9pZCBKU011dGF0
aW9uQ2FsbGJhY2s6OmNhbGwoY29uc3QgVmVjdAogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0
aW9uQ2FsbChjb250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwogCi0gICAgSlNWYWx1ZSBleGNl
cHRpb247Ci0gICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGNhbGxiYWNrLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGpzT2JzZXJ2ZXIsIGFyZ3MsICZleGNlcHRpb24pOworICAgIEV4
Y2VwdGlvbiogZXhjZXB0aW9uOworICAgIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVj
LCBjYWxsYmFjaywgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc09ic2VydmVyLCBhcmdzLCBleGNlcHRp
b24pOwogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29v
a2llLCBjb250ZXh0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFi
bGVKU1N0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
UmVhZGFibGVKU1N0cmVhbS5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1JlYWRhYmxlSlNTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3
ICs1Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBnZXRQcm9wZXJ0eUZyb21PYmoKICAgICBy
ZXR1cm4gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBpZGVu
dGlmaWVyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBjYWxsRnVuY3Rpb24oRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGpzRnVuY3Rpb24sIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmd1bWVudHMsIEpTVmFsdWUqIGV4Y2VwdGlvbikKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBjYWxsRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGpzRnVuY3Rpb24sIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMsIEV4Y2VwdGlvbiomIGV4
Y2VwdGlvbikKIHsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IGdldENhbGxEYXRhKGpzRnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTEwMCw4ICsxMDAsOCBA
QCB2b2lkIFJlYWRhYmxlSlNTdHJlYW06OlNvdXJjZTo6c3RhcnQoRXhlCiAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocmVhZGFibGVTdHJl
YW0uanNDb250cm9sbGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpKSk7CiAKLSAgICBKU1ZhbHVlIGV4
Y2VwdGlvbjsKLSAgICBjYWxsRnVuY3Rpb24oJmV4ZWMsIHN0YXJ0RnVuY3Rpb24sIG1fc291cmNl
LmdldCgpLCBhcmd1bWVudHMsICZleGNlcHRpb24pOworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9u
OworICAgIGNhbGxGdW5jdGlvbigmZXhlYywgc3RhcnRGdW5jdGlvbiwgbV9zb3VyY2UuZ2V0KCks
IGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAg
dGhyb3dWTUVycm9yKCZleGVjLCBleGNlcHRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiAxODUxODEpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OSwxMSArOTksMTEgQEAgdm9pZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGVGdW5j
dGlvbkluQwogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEpT
TWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9uQ2FsbCgmY29udGV4dCwgY2Fs
bFR5cGUsIGNhbGxEYXRhKTsKIAotICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIEV4Y2VwdGlv
biogZXhjZXB0aW9uOwogICAgIGlmIChpczxEb2N1bWVudD4oY29udGV4dCkpCi0gICAgICAgIEpT
TWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBtX2Z1bmN0aW9uLmdldCgpLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgJmV4Y2VwdGlvbik7CisgICAgICAgIEpTTWFp
blRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBtX2Z1bmN0aW9uLmdldCgpLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgZXhjZXB0aW9uKTsKICAgICBlbHNlCi0gICAgICAg
IEpTQzo6Y2FsbChleGVjLCBtX2Z1bmN0aW9uLmdldCgpLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRo
aXNWYWx1ZSwgYXJncywgJmV4Y2VwdGlvbik7CisgICAgICAgIEpTQzo6Y2FsbChleGVjLCBtX2Z1
bmN0aW9uLmdldCgpLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgZXhjZXB0
aW9uKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FsbEZ1bmN0aW9uKGNv
b2tpZSwgJmNvbnRleHQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
MCw5ICsxNjAsOCBAQCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyCiAK
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVTY3JpcHQobV9mcmFtZSwgc291cmNlVVJMLCBzb3Vy
Y2VDb2RlLnN0YXJ0TGluZSgpKTsKIAotICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsK
LQotICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1
YXRlKGV4ZWMsIGpzU291cmNlQ29kZSwgc2hlbGwsICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAg
ICBFeGNlcHRpb24qIGV2YWx1YXRpb25FeGNlcHRpb247CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1
ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywganNTb3VyY2VDb2RlLCBz
aGVsbCwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZEV2YWx1YXRlU2NyaXB0KGNvb2tpZSwgbV9mcmFtZSk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAko
cmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1
ZGUgPHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3Rh
bmNlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhj
ZXB0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5oPgpAQCAtMjcwMiw3ICsyNzAzLDcgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IFNlcmlhbAogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlh
bGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIHZhbHVlLCBu
dWxscHRyLCBudWxscHRyKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAg
ICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBl
eGVjLT5leGNlcHRpb24oKSk7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywg
ZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCkpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0yNzMyLDcgKzI3MzMsNyBAQCBKU1Zh
bHVlUmVmIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpCiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IGRlc2VyaWFsaXplKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbnVsbHB0cik7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24p
Ci0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhlYy0+ZXhjZXB0aW9uKCkp
OworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigp
LT52YWx1ZSgpKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8aGVhcC9TdHJvbmdJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbi5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJy
b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgpAQCAtOTgsMTUgKzk5LDE1IEBAIHZv
aWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICBpZiAoaXNFeGVjdXRp
b25Gb3JiaWRkZW4oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUgZXhjZXB0aW9uOwotICAgIGV2YWx1YXRlKHNvdXJjZUNvZGUsICZleGNlcHRpb24pOwot
ICAgIGlmIChleGNlcHRpb24uanNWYWx1ZSgpKSB7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247
CisgICAgZXZhbHVhdGUoc291cmNlQ29kZSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9u
KSB7CiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKCkpOwotICAgICAgICByZXBvcnRFeGNl
cHRpb24obV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhjZXB0aW9u
LmpzVmFsdWUoKSk7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihtX3dvcmtlckdsb2JhbFNjb3Bl
V3JhcHBlci0+Z2xvYmFsRXhlYygpLCBleGNlcHRpb24pOwogICAgIH0KIH0KIAotdm9pZCBXb3Jr
ZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3Vy
Y2VDb2RlLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSogZXhjZXB0aW9uKQordm9pZCBXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlLCBKU0M6OkV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKQogewogICAgIGlmIChpc0V4
ZWN1dGlvbkZvcmJpZGRlbigpKQogICAgICAgICByZXR1cm47CkBAIC0xMTYsOCArMTE3LDggQEAg
dm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjbwogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCk7CiAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKLSAgICBKU1ZhbHVlIGV2YWx1YXRpb25FeGNlcHRpb247
Ci0gICAgSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2VDb2RlLmpzU291cmNlQ29kZSgpLCBtX3dv
cmtlckdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsVGhpcygpLCAmZXZhbHVhdGlvbkV4Y2VwdGlv
bik7CisgICAgSlNDOjpFeGNlcHRpb24qIGV2YWx1YXRpb25FeGNlcHRpb247CisgICAgSlNDOjpl
dmFsdWF0ZShleGVjLCBzb3VyY2VDb2RlLmpzU291cmNlQ29kZSgpLCBtX3dvcmtlckdsb2JhbFNj
b3BlV3JhcHBlci0+Z2xvYmFsVGhpcygpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKIAogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYgKChldmFsdWF0aW9uRXhjZXB0aW9uICYmIGlzVGVy
bWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihldmFsdWF0aW9uRXhjZXB0aW9uKSkgCkBAIC0xMzEs
MTYgKzEzMiwxOSBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvCiAg
ICAgICAgIGludCBsaW5lTnVtYmVyID0gMDsKICAgICAgICAgaW50IGNvbHVtbk51bWJlciA9IDA7
CiAgICAgICAgIFN0cmluZyBzb3VyY2VVUkwgPSBzb3VyY2VDb2RlLnVybCgpLnN0cmluZygpOwot
ICAgICAgICBpZiAobV93b3JrZXJHbG9iYWxTY29wZS0+c2FuaXRpemVTY3JpcHRFcnJvcihlcnJv
ck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgc291cmNlVVJMLCBzb3VyY2VDb2Rl
LmNhY2hlZFNjcmlwdCgpKSkKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSgqbV92bSwgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVF
cnJvcihleGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSkpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAqZXhjZXB0aW9uID0gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoKm1fdm0sIGV2YWx1YXRp
b25FeGNlcHRpb24pOworICAgICAgICBpZiAobV93b3JrZXJHbG9iYWxTY29wZS0+c2FuaXRpemVT
Y3JpcHRFcnJvcihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgc291cmNl
VVJMLCBzb3VyY2VDb2RlLmNhY2hlZFNjcmlwdCgpKSkgeworICAgICAgICAgICAgdm0udGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlLmltcGwoKSkpOwor
ICAgICAgICAgICAgZXZhbHVhdGlvbkV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlvbigpOworICAgICAg
ICAgICAgdm0uY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm5l
ZEV4Y2VwdGlvbiA9IGV2YWx1YXRpb25FeGNlcHRpb247CiB9CiAKLXZvaWQgV29ya2VyU2NyaXB0
Q29udHJvbGxlcjo6c2V0RXhjZXB0aW9uKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBl
eGNlcHRpb24pCit2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNldEV4Y2VwdGlvbihKU0M6
OkV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewotICAgIG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVy
LT5nbG9iYWxFeGVjKCktPnZtKCkudGhyb3dFeGNlcHRpb24obV93b3JrZXJHbG9iYWxTY29wZVdy
YXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhjZXB0aW9uLmpzVmFsdWUoKSk7CisgICAgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMgPSBtX3dvcmtlckdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsRXhlYygpOwor
ICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0KIAogdm9p
ZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzY2hlZHVsZUV4ZWN1dGlvblRlcm1pbmF0aW9uKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRD
b250cm9sbGVyLmgJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsOSArNjAs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGV2YWx1
YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKLSAgICAgICAgdm9pZCBldmFsdWF0ZShjb25z
dCBTY3JpcHRTb3VyY2VDb2RlJiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUqIGV4Y2VwdGlvbik7
CisgICAgICAgIHZvaWQgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYsIEpTQzo6RXhj
ZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pOwogCi0gICAgICAgIHZvaWQgc2V0RXhjZXB0aW9u
KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7CisgICAgICAgIHZvaWQgc2V0RXhjZXB0
aW9uKEpTQzo6RXhjZXB0aW9uKik7CiAKICAgICAgICAgLy8gQXN5bmMgcmVxdWVzdCB0byB0ZXJt
aW5hdGUgYSBKUyBydW4gZXhlY3V0aW9uLiBFdmVudHVhbGx5IGNhdXNlcyB0ZXJtaW5hdGlvbgog
ICAgICAgICAvLyBleGNlcHRpb24gcmFpc2VkIGR1cmluZyBKUyBleGVjdXRpb24sIGlmIHRoZSB3
b3JrZXIgdGhyZWFkIGhhcHBlbnMgdG8gcnVuIEpTLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNp
b24gMTg1MTgxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgV29ya2Vy
U2NyaXB0RGVidWdTZXJ2ZXI6OnJ1bkV2ZW50TG8KICAgICB9IHdoaWxlIChyZXN1bHQgIT0gTWVz
c2FnZVF1ZXVlVGVybWluYXRlZCAmJiAhbV9kb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKTsK
IH0KIAotdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cmVwb3J0RXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uKSBjb25zdAordm9pZCBXb3Jr
ZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uKSBjb25zdAogewogICAgIFdlYkNvcmU6OnJlcG9y
dEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAx
ODUxODEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1Nl
cnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIGRpZENvbnRpbnVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBvdmVycmlkZSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgcnVuRXZlbnRMb29wV2hpbGVQYXVzZWQoKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50U2NyaXB0KEpTQzo6RXhlY1N0YXRlKikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9u
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24q
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFdvcmtlckdsb2JhbFNjb3BlKiBtX3dvcmtlckdsb2Jh
bFNjb3BlOwogICAgIExpc3RlbmVyU2V0IG1fbGlzdGVuZXJzOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDE4NTE4
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgaWQgY3JlYXRlSlNXcmFwcGVyKEpTQzo6
SlNPYmplY3QqIG9iamVjdAogICAgIHJldHVybiBbW1tXZWJTY3JpcHRPYmplY3QgYWxsb2NdIF9p
bml0V2l0aEpTT2JqZWN0Om9iamVjdCBvcmlnaW5Sb290T2JqZWN0Om9yaWdpbiByb290T2JqZWN0
OnJvb3RdIGF1dG9yZWxlYXNlXTsKIH0KIAotc3RhdGljIHZvaWQgYWRkRXhjZXB0aW9uVG9Db25z
b2xlKEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlJiBleGNlcHRpb24pCitzdGF0aWMgdm9p
ZCBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoRXhlY1N0YXRlKiBleGVjLCBKU0M6OkV4Y2VwdGlvbiog
ZXhjZXB0aW9uKQogewogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBhc0pTRE9NV2luZG93KGV4
ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKSk7CiAgICAgaWYgKCF3aW5kb3cgfHwgIWV4Y2VwdGlv
bikKQEAgLTEzMSw3ICsxMzEsNyBAQCBzdGF0aWMgdm9pZCBhZGRFeGNlcHRpb25Ub0NvbnNvbGUo
RXhlY1N0CiAKIHN0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwor
ICAgIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjLCBl
eGNlcHRpb24pOwogfQpAQCAtMzQyLDggKzM0Miw4IEBAIC0gKGlkKWNhbGxXZWJTY3JpcHRNZXRo
b2Q6KE5TU3RyaW5nICopbmEKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQogICAgICAg
ICByZXR1cm4gbmlsOwogCi0gICAgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICBKU0M6OkpT
VmFsdWUgcmVzdWx0ID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIFtzZWxmIF9pbXBdLCBhcmdMaXN0LCAmZXhjZXB0aW9uKTsK
KyAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uOworICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQg
PSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSwgW3NlbGYgX2ltcF0sIGFyZ0xpc3QsIGV4Y2VwdGlvbik7CiAKICAgICBpZiAoZXhj
ZXB0aW9uKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjLCBleGNlcHRpb24p
OwpAQCAtMzY2LDcgKzM2Niw3IEBAIC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAq
KXNjcmkKIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAotICAgIEpTQzo6SlNW
YWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywg
bWFrZVNvdXJjZShTdHJpbmcoc2NyaXB0KSksIEpTQzo6SlNWYWx1ZSgpLCAwKTsKKyAgICBKU0M6
OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRlKGV4
ZWMsIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlwdCkpLCBKU0M6OkpTVmFsdWUoKSk7CiAKICAgICBp
ZCByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpy
ZXR1cm5WYWx1ZSBvcmlnaW5Sb290T2JqZWN0OltzZWxmIF9vcmlnaW5Sb290T2JqZWN0XSByb290
T2JqZWN0OltzZWxmIF9yb290T2JqZWN0XV07CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTg1
MTgxKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBib29sIFBhZ2VTY3JpcHREZWJ1
Z1NlcnZlcjo6aXNDb250ZW50U2NyCiAgICAgcmV0dXJuICZjdXJyZW50V29ybGQoZXhlYykgIT0g
Jm1haW5UaHJlYWROb3JtYWxXb3JsZCgpOwogfQogCi12b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZl
cjo6cmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb24pIGNv
bnN0Cit2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgRXhjZXB0aW9uKiBleGNlcHRpb24pIGNvbnN0CiB7CiAgICAgV2ViQ29yZTo6cmVw
b3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAxODUxODEp
CisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ29udGludWUoSlNDOjpKU0dsb2JhbE9iamVjdCopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBydW5FdmVudExvb3BXaGlsZVBhdXNlZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9v
bCBpc0NvbnRlbnRTY3JpcHQoSlNDOjpFeGVjU3RhdGUqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQg
cnVuRXZlbnRMb29wV2hpbGVQYXVzZWRJbnRlcm5hbCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysg
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5Nyw5ICsxOTcsOSBAQCB2b2lkIFdvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRTY3Jp
cHRzKGNvCiAKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzY3JpcHRJbXBvcnRl
ZChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHNjcmlwdExvYWRlci0+aWRlbnRpZmllcigpLCBz
Y3JpcHRMb2FkZXItPnNjcmlwdCgpKTsKIAotICAgICAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSBleGNlcHRpb247Ci0gICAgICAgIG1fc2NyaXB0LT5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2Rl
KHNjcmlwdExvYWRlci0+c2NyaXB0KCksIHNjcmlwdExvYWRlci0+cmVzcG9uc2VVUkwoKSksICZl
eGNlcHRpb24pOwotICAgICAgICBpZiAoIWV4Y2VwdGlvbi5oYXNOb1ZhbHVlKCkpIHsKKyAgICAg
ICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbjsKKyAgICAgICAgbV9zY3JpcHQtPmV2YWx1YXRl
KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSwgc2NyaXB0TG9hZGVyLT5y
ZXNwb25zZVVSTCgpKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikgewogICAg
ICAgICAgICAgbV9zY3JpcHQtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODUxODEpCisrKyBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAor
MjAxNS0wNi0wMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgZmlu
YWxseSBibG9ja3Mgc2hvdWxkIG5vdCBzZXQgdGhlIGV4Y2VwdGlvbiBzdGFjayB0cmFjZSB3aGVu
IHJlLXRocm93aW5nIHRoZSBleGNlcHRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0
aW9uKToKKyAgICAgICAgLSBDaGFuZ2VkIHRvIHVzZSB0aGUgbmV3IEV4Y2VwdGlvbiBvYmplY3Qu
CisKIDIwMTUtMDYtMDIgIEh5dW5nd29vayBMZWUgIDxoeXVuZ3dvb2subGVlQG5hdmVyY29ycC5j
b20+CiAKICAgICAgICAgW0VGTF0gSW1wbGVtZW50IGxvYWRfc3RhcnRlZCBjYWxsYmFjayBpbiBF
d2tQYWdlQ2xpZW50LgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDE4NTE4
MSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sTWVz
c2FnZXMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvRXhjZXB0aW9uLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNM
b2NrLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgpAQCAtNTIyLDcgKzUyMyw3IEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OnJlcG9ydEV4Y2VwdGlvbihKU0MKICAgICBpZiAoIXRvSlNET01X
aW5kb3coZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24oZXhlY1N0YXRlLCB0b0pTKGV4ZWNTdGF0
ZSwgZXhjZXB0aW9uKSk7CisgICAgV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwg
RXhjZXB0aW9uOjpjYXN0KHRvSlMoZXhlY1N0YXRlLCBleGNlcHRpb24pKSk7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRCdW5kbGU6OmRpZENyZWF0ZVBhZ2UoV2ViUGFnZSogcGFnZSkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA2LTAzICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBmaW5hbGx5IGJsb2NrcyBzaG91bGQgbm90
IHNldCB0aGUgZXhjZXB0aW9uIHN0YWNrIHRyYWNlIHdoZW4gcmUtdGhyb3dpbmcgdGhlIGV4Y2Vw
dGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NTUyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoK1tXZWJWaWV3IF9yZXBvcnRFeGNlcHRpb246
aW5Db250ZXh0Ol0pOgorICAgICAgICAoV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQ2FjaGVQ
YXRoSWZOZWNlc3NhcnkpOgorICAgICAgICAtIENoYW5nZWQgdG8gdXNlIHRoZSBuZXcgRXhjZXB0
aW9uIG9iamVjdC4KKwogMjAxNS0wNi0wMyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBw
bGUuY29tPgogCiAgICAgICAgIERlZmluZSBXS19FTkFCTEVfRk9STUFMX0RFTEVHQVRFX1BST1RP
Q09MUyBvbiBpT1MKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlz
aW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw3IEBACiAjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9D
RlNldC5oPgogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTENvbm5lY3Rpb24uaD4KICNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0V4Y2Vw
dGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgogI2ltcG9ydCA8
V2ViQ29yZS9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUv
QW5pbWF0aW9uQ29udHJvbGxlci5oPgpAQCAtNzI0LDcgKzcyNSw4IEBAICsgKHZvaWQpX3JlcG9y
dEV4Y2VwdGlvbjooSlNWYWx1ZVJlZilleGMKICAgICBpZiAoIXRvSlNET01XaW5kb3coZXhlY1N0
YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICByZXBv
cnRFeGNlcHRpb24oZXhlY1N0YXRlLCB0b0pTKGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKSk7CisgICAg
RXhjZXB0aW9uKiB2bUV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjo6Y2FzdCh0b0pTKGV4ZWNTdGF0ZSwg
ZXhjZXB0aW9uKSk7CisgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgdm1FeGNlcHRpb24p
OwogfQogCiBzdGF0aWMgdm9pZCBXZWJLaXRJbml0aWFsaXplQXBwbGljYXRpb25DYWNoZVBhdGhJ
Zk5lY2Vzc2FyeSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAxODUxODEpCisrKyBT
b3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBA
QAorMjAxNS0wNi0wMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
ZmluYWxseSBibG9ja3Mgc2hvdWxkIG5vdCBzZXQgdGhlIGV4Y2VwdGlvbiBzdGFjayB0cmFjZSB3
aGVuIHJlLXRocm93aW5nIHRoZSBleGNlcHRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6
cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgLSBDaGFuZ2VkIHRvIHVzZSB0aGUgbmV3IEV4Y2Vw
dGlvbiBvYmplY3QuCisKIDIwMTUtMDYtMDIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIFdlYktpdCBwb2xpY3kgZGVsZWdhdGUgc2hvdWxkIHN1Z2dlc3QgaWYg
YSBuYXZpZ2F0aW9uIHNob3VsZCBiZSBhbGxvd2VkIHRvIG9wZW4gVVJMcyBleHRlcm5hbGx5LgpJ
bmRleDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJL
aXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDI5LDcgKzYwMjksOCBAQCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OnJlcG9yCiAgICAgaWYgKCF0b0pTRE9N
V2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKICAgICAgICAgcmV0dXJu
IEVfRkFJTDsKIAotICAgIFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbihleGVjU3RhdGUsIHRvSlMo
ZXhlY1N0YXRlLCBleGNlcHRpb24pKTsKKyAgICBKU0M6OkV4Y2VwdGlvbiogdm1FeGNlcHRpb24g
PSBKU0M6OkV4Y2VwdGlvbjo6Y2FzdCh0b0pTKGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKSk7CisgICAg
V2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgdm1FeGNlcHRpb24pOwogICAgIHJl
dHVybiBTX09LOwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODUxODEpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxNS0wNi0wMyAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgZmluYWxseSBibG9ja3Mg
c2hvdWxkIG5vdCBzZXQgdGhlIGV4Y2VwdGlvbiBzdGFjayB0cmFjZSB3aGVuIHJlLXRocm93aW5n
IHRoZSBleGNlcHRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDU1MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGZhc3QvZG9tL3JlZ3Jlc3MtMTMxNTMwLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
LSBSZWJhc2VkIHJlc3VsdHMgYmVjYXVzZSB3ZSBub3cgaGF2ZSBhIHByb3BlciBsaW5lIG51bWJl
ci4KKworICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb25zLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9u
LWV4Y2VwdGlvbnMuaHRtbDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL3Jl
c291cmNlcy9icmVhay1vbi1leGNlcHRpb25zLmpzOiBBZGRlZC4KKyAgICAgICAgKHdpbmRvdy5v
bmVycm9yKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICh0ZXN0RXhjZXB0aW9ucyk6CisgICAg
ICAgICh0ZXN0UHJvbWlzZXMpOgorCisgICAgICAgICogcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3Rh
dGlvbnM6CisgICAgICAgIC0gVGhlIG5ldyB0ZXN0IG5lZWRzIHRvIGJlIHNraXBwZWQgYmVjYXVz
ZSBpdCBtYXkgY3VycmVudCBmYWlsIG9uIFdLMiBkdWUgdG8KKyAgICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1NjI2LgorCiAyMDE1LTA2LTAzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgU2tpcCB3
ZWJnbC91c2VXaGlsZVBlbmRpbmcuaHRtbCBvbiBXZWJLaXQgMSBmb2xsb3dpbmc6CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9yZWdyZXNzLTEzMTUzMC1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVncmVzcy0xMzE1MzAtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAxODUxODEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZWdyZXNzLTEzMTUzMC1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiBDT05TT0xFIE1FU1NB
R0U6IGxpbmUgNTogRXhjZXB0aW9uIHRvIHRyaWdnZXIgdW53aW5kaW5nIGluIE11dGF0aW9uT2Jz
ZXJ2ZXIKLUNPTlNPTEUgTUVTU0FHRTogUGVuZGluZyBleGNlcHRpb24gYmVmb3JlIE11dGF0aW9u
T2JzZXJ2ZXJzIGFyZSBjYWxsZWQuCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMjI6IFBlbmRpbmcg
ZXhjZXB0aW9uIGJlZm9yZSBNdXRhdGlvbk9ic2VydmVycyBhcmUgY2FsbGVkLgogUmVncmVzc2lv
biB0ZXN0IGZvciBodHRwczovL3dlYmtpdC5vcmcvYi8xMzE1MzAuIFRoaXMgdGVzdCBzaG91bGQg
bm90IGNyYXNoLgogCiBNdXRhdGUgdGhhdCBub2RlCkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9ucy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbnMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2Vy
L2JyZWFrLW9uLWV4Y2VwdGlvbnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjMgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBQYXNzIDE6IHRlc3RFeGNlcHRpb25z
IHdpdGggYnJlYWsgb24gYWxsIGV4Y2VwdGlvbnMKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA3OiBm
b286IHRyeQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDk6IGZvbzogZm9yLi4ub2Y6IGkgPSAxCitD
T05TT0xFIE1FU1NBR0U6IGxpbmUgMTE6IGZvbzogdGhyb3cgIlRlc3RFcnJvciIKK0NPTlNPTEUg
TUVTU0FHRTogbGluZSAxNjogZm9vOiBjYXRjaCBUZXN0RXJyb3IKK0NPTlNPTEUgTUVTU0FHRTog
bGluZSAxOTogZm9vOiBmaW5hbGx5CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMjogV2luZG93Lm9u
ZXJyb3I6IFRlc3RFcnJvcgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE3OiBUZXN0RXJyb3IKK0NP
TlNPTEUgTUVTU0FHRTogbGluZSAxOiBQYXNzIDI6IHRlc3RQcm9taXNlcyB3aXRoIGJyZWFrIG9u
IGFsbCBleGNlcHRpb25zCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMzY6IFByb21pc2U6IHRoZW4K
K0NPTlNPTEUgTUVTU0FHRTogbGluZSA3OiBmb286IHRyeQorQ09OU09MRSBNRVNTQUdFOiBsaW5l
IDk6IGZvbzogZm9yLi4ub2Y6IGkgPSAxCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTE6IGZvbzog
dGhyb3cgIlRlc3RFcnJvciIKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxNjogZm9vOiBjYXRjaCBU
ZXN0RXJyb3IKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOTogZm9vOiBmaW5hbGx5CitDT05TT0xF
IE1FU1NBR0U6IGxpbmUgMzk6IFByb21pc2U6IGNhdGNoIFRlc3RFcnJvcgorQ09OU09MRSBNRVNT
QUdFOiBsaW5lIDE6IFBhc3MgMzogdGVzdEV4Y2VwdGlvbnMgd2l0aCBicmVhayBvbiB1bmNhdWdo
dCBleGNlcHRpb25zCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNzogZm9vOiB0cnkKK0NPTlNPTEUg
TUVTU0FHRTogbGluZSA5OiBmb286IGZvci4uLm9mOiBpID0gMQorQ09OU09MRSBNRVNTQUdFOiBs
aW5lIDExOiBmb286IHRocm93ICJUZXN0RXJyb3IiCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTY6
IGZvbzogY2F0Y2ggVGVzdEVycm9yCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTk6IGZvbzogZmlu
YWxseQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDI6IFdpbmRvdy5vbmVycm9yOiBUZXN0RXJyb3IK
K0NPTlNPTEUgTUVTU0FHRTogbGluZSAxNzogVGVzdEVycm9yCitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgMTogUGFzcyA0OiB0ZXN0UHJvbWlzZXMgd2l0aCBicmVhayBvbiB1bmNhdWdodCBleGNlcHRp
b25zCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMzY6IFByb21pc2U6IHRoZW4KK0NPTlNPTEUgTUVT
U0FHRTogbGluZSA3OiBmb286IHRyeQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDk6IGZvbzogZm9y
Li4ub2Y6IGkgPSAxCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTE6IGZvbzogdGhyb3cgIlRlc3RF
cnJvciIKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxNjogZm9vOiBjYXRjaCBUZXN0RXJyb3IKK0NP
TlNPTEUgTUVTU0FHRTogbGluZSAxOTogZm9vOiBmaW5hbGx5CitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgMzk6IFByb21pc2U6IGNhdGNoIFRlc3RFcnJvcgorVGVzdCB0aGF0IHBhdXNpbmcgaW4gZGlm
ZmVyZW50IHdheXMgdHJpZ2dlcnMgZGlmZmVyZW50IHBhdXNlIHJlYXNvbnMuCisKK1Bhc3MgMTog
dGVzdEV4Y2VwdGlvbnMgd2l0aCBicmVhayBvbiBhbGwgZXhjZXB0aW9ucworUEFVU0UgIzEKKyAg
ICBQQVVTRUQgQVQ6IGZvbzoxMTozMworUEFVU0UgIzIKKyAgICBQQVVTRUQgQVQ6IGZvbzoxNjox
NQorUkVTVU1FRAorCitQYXNzIDI6IHRlc3RQcm9taXNlcyB3aXRoIGJyZWFrIG9uIGFsbCBleGNl
cHRpb25zCitQQVVTRSAjMworICAgIFBBVVNFRCBBVDogZm9vOjExOjMzCitQQVVTRSAjNAorICAg
IFBBVVNFRCBBVDogZm9vOjE2OjE1CitQQVVTRSAjNQorICAgIFBBVVNFRCBBVDogcHJvbWlzZUNh
dGNoOjM5OjE1CitSRVNVTUVECisKK1Bhc3MgMzogdGVzdEV4Y2VwdGlvbnMgd2l0aCBicmVhayBv
biB1bmNhdWdodCBleGNlcHRpb25zCitQQVVTRSAjNgorICAgIFBBVVNFRCBBVDogZm9vOjE2OjE1
CitSRVNVTUVECisKK1Bhc3MgNDogdGVzdFByb21pc2VzIHdpdGggYnJlYWsgb24gdW5jYXVnaHQg
ZXhjZXB0aW9ucworUEFVU0UgIzcKKyAgICBQQVVTRUQgQVQ6IGZvbzoxNjoxNQorUEFVU0UgIzgK
KyAgICBQQVVTRUQgQVQ6IHByb21pc2VDYXRjaDozOToxNQorUkVTVU1FRAorCisKSW5kZXg6IExh
eW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb25zLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2Vw
dGlvbnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9icmVhay1vbi1leGNlcHRpb25zLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIg
QEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vcmVz
b3VyY2VzL2JyZWFrLW9uLWV4Y2VwdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0
aW9uIHRlc3QoKQoreworICAgIHZhciBwYXVzZXMgPSAwOworICAgIHZhciBpbmRleCA9IDA7CisK
KyAgICBmdW5jdGlvbiBlbmFibGVCcmVha09uQWxsRXhjZXB0aW9ucygpIHsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hbGxFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNhYmxl
ZCA9IGZhbHNlOworICAgIH0KKworICAgIGZ1bmN0aW9uIGRpc2FibGVCcmVha09uQWxsRXhjZXB0
aW9ucygpIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hbGxFeGNlcHRp
b25zQnJlYWtwb2ludC5kaXNhYmxlZCA9IHRydWU7CisgICAgfQorCisgICAgZnVuY3Rpb24gZW5h
YmxlQnJlYWtPblVuY2F1Z2h0RXhjZXB0aW9ucygpIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRl
YnVnZ2VyTWFuYWdlci5hbGxVbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0g
ZmFsc2U7CisgICAgfQorCisgICAgZnVuY3Rpb24gZGlzYWJsZUJyZWFrT25VbmNhdWdodEV4Y2Vw
dGlvbnMoKSB7CisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWxsVW5jYXVn
aHRFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNhYmxlZCA9IHRydWU7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gdGl0bGUoc3RyKSB7CisgICAgICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2Uo
InNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKCciICsgc3RyICsgIicpOyB9LCAw
KSIpOworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZyhzdHIpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIHJ1blRlc3RDYXNlKHRlc3QpIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUlu
UGFnZSgic2V0VGltZW91dCgiICsgdGVzdCArICIsIDApIik7CisgICAgfQorCisgICAgdmFyIHNj
ZW5hcmlvcyA9IFsKKyAgICAgICAgLy8gUGFzcyAxCisgICAgICAgIHsgZXhwcmVzc2lvbjogLy8g
U2hvdWxkIHBhdXNlIGF0IFRocm93IFBvaW50IDEuCisgICAgICAgICAgICAiZW5hYmxlQnJlYWtP
bkFsbEV4Y2VwdGlvbnMoKTsiICsKKyAgICAgICAgICAgICJ0aXRsZSgnUGFzcyAxOiB0ZXN0RXhj
ZXB0aW9ucyB3aXRoIGJyZWFrIG9uIGFsbCBleGNlcHRpb25zJyk7IiArCisgICAgICAgICAgICAi
cnVuVGVzdENhc2UoJ3Rlc3RFeGNlcHRpb25zJyk7IgorICAgICAgICB9LAorCisgICAgICAgIC8v
IFBhc3MgMjoKKyAgICAgICAgeyBleHByZXNzaW9uOiAvLyBTaG91bGQgcGF1c2UgYXQgVGhyb3cg
UG9pbnQgMS4KKyAgICAgICAgICAgICJ0aXRsZSgnUGFzcyAyOiB0ZXN0UHJvbWlzZXMgd2l0aCBi
cmVhayBvbiBhbGwgZXhjZXB0aW9ucycpOyIgKworICAgICAgICAgICAgInJ1blRlc3RDYXNlKCd0
ZXN0UHJvbWlzZXMnKTsiCisgICAgICAgIH0sCisKKyAgICAgICAgLy8gUGFzcyAzCisgICAgICAg
IHsgZXhwcmVzc2lvbjogLy8gU2hvdWxkIHBhdXNlIGF0IFRocm93IFBvaW50IDIuCisgICAgICAg
ICAgICAiZGlzYWJsZUJyZWFrT25BbGxFeGNlcHRpb25zKCk7ICIgKworICAgICAgICAgICAgImVu
YWJsZUJyZWFrT25VbmNhdWdodEV4Y2VwdGlvbnMoKTsgIiArCisgICAgICAgICAgICAidGl0bGUo
J1Bhc3MgMzogdGVzdEV4Y2VwdGlvbnMgd2l0aCBicmVhayBvbiB1bmNhdWdodCBleGNlcHRpb25z
Jyk7IiArCisgICAgICAgICAgICAicnVuVGVzdENhc2UoJ3Rlc3RFeGNlcHRpb25zJyk7IgorICAg
ICAgICB9LAorCisgICAgICAgIC8vIFBhc3MgNAorICAgICAgICB7IGV4cHJlc3Npb246CisgICAg
ICAgICAgICAidGl0bGUoJ1Bhc3MgNDogdGVzdFByb21pc2VzIHdpdGggYnJlYWsgb24gdW5jYXVn
aHQgZXhjZXB0aW9ucycpOyIgKworICAgICAgICAgICAgInJ1blRlc3RDYXNlKCd0ZXN0UHJvbWlz
ZXMnKTsiCisgICAgICAgIH0sCisgICAgXTsKKworICAgIGZ1bmN0aW9uIG5leHRTY2VuYXJpbygp
CisgICAgeworICAgICAgICB2YXIgc2NlbmFyaW8gPSBzY2VuYXJpb3NbaW5kZXgrK107CisgICAg
ICAgIGlmICghc2NlbmFyaW8pIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVU
ZXN0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNjZW5h
cmlvLmV4cHJlc3Npb24pCisgICAgICAgICAgICBldmFsKHNjZW5hcmlvLmV4cHJlc3Npb24pOwor
ICAgIH0KKworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlNjcmlwdEFkZGVkLCBmdW5jdGlv
bihldmVudCkgeworICAgICAgICB2YXIgc2NyaXB0T2JqZWN0ID0gZXZlbnQuZGF0YS5zY3JpcHQ7
CisgICAgICAgIGlmICghL2JyZWFrLW9uLWV4Y2VwdGlvbnNcLmpzJC8udGVzdChzY3JpcHRPYmpl
Y3QudXJsKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbmV4dFNjZW5hcmlvKCk7Cisg
ICAgfSk7CisKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5DYWxsRnJhbWVzRGlkQ2hhbmdl
LCBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgY2FsbEZyYW1lID0gV2ViSW5zcGVjdG9y
LmRlYnVnZ2VyTWFuYWdlci5hY3RpdmVDYWxsRnJhbWU7CisgICAgICAgIGlmIChjYWxsRnJhbWUp
IHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQQVVTRSAjIiArICgrK3BhdXNlcykp
OworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQoV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TWFuYWdlci5wYXVzZVJlYXNvbiA9PSAiZXhjZXB0aW9uIik7CisKKyAgICAgICAgICAgIHZhciBm
dW5jTmFtZSA9IGNhbGxGcmFtZS5mdW5jdGlvbk5hbWUgfHwgIjxhbm9ueW1vdXM+IjsKKyAgICAg
ICAgICAgIHZhciBsb2NhdGlvbiA9IGNhbGxGcmFtZS5zb3VyY2VDb2RlTG9jYXRpb247CisgICAg
ICAgICAgICB2YXIgbGluZSA9IGxvY2F0aW9uLmxpbmVOdW1iZXI7CisgICAgICAgICAgICB2YXIg
Y29sdW1uID0gbG9jYXRpb24uY29sdW1uTnVtYmVyOworCisgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LmxvZygiICAgIFBBVVNFRCBBVDogIiArIGZ1bmNOYW1lICsgIjoiICsgbGluZSArICI6IiAr
IGNvbHVtbik7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnJlc3Vt
ZSgpOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygi
UkVTVU1FRCIpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIiIpOworICAgICAgICAg
ICAgbmV4dFNjZW5hcmlvKCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIEluc3BlY3RvclRl
c3QucmVsb2FkUGFnZSgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1
blRlc3QoKSI+CisgICAgPHA+VGVzdCB0aGF0IHBhdXNpbmcgaW4gZGlmZmVyZW50IHdheXMgdHJp
Z2dlcnMgZGlmZmVyZW50IHBhdXNlIHJlYXNvbnMuPC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3Jlc291cmNlcy9icmVhay1vbi1leGNl
cHRpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9y
ZXNvdXJjZXMvYnJlYWstb24tZXhjZXB0aW9ucy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9yZXNvdXJjZXMvYnJlYWstb24tZXhjZXB0aW9ucy5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACit3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9u
KGUpeworICAgIGNvbnNvbGUubG9nKCJXaW5kb3cub25lcnJvcjogIiArIGUpOworfTsKKworZnVu
Y3Rpb24gZm9vKGFycikgeworICAgIHRyeSB7CisgICAgICAgIGNvbnNvbGUubG9nKCJmb286IHRy
eSIpOworICAgICAgICBmb3IgKGkgb2YgYXJyKSB7CisgICAgICAgICAgICBjb25zb2xlLmxvZygi
Zm9vOiBmb3IuLi5vZjogaSA9ICIgKyBpKTsKKyAgICAgICAgICAgIGlmIChpID49IDEpIHsKKyAg
ICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZm9vOiB0aHJvdyAiVGVzdEVycm9yIicpOworICAg
ICAgICAgICAgICAgIHRocm93ICJUZXN0RXJyb3IiOyAvLyBUaHJvdyBwb2ludCAxLgorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBjb25zb2xlLmxv
ZygiZm9vOiBjYXRjaCAiICsgZSk7CisgICAgICAgIHRocm93IGU7IC8vIFRocm93IHBvaW50IDIu
CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgY29uc29sZS5sb2coImZvbzogZmluYWxseSIpOwor
ICAgIH0KKyAgICByZXR1cm4gNTsKK30KKwordmFyIGlubmVyID0gWyAxLCAyLCAzIF07Cit2YXIg
b3V0ZXIgPSBbWyAia2V5IiwgaW5uZXIgXV07CisKK2Z1bmN0aW9uIHRlc3RFeGNlcHRpb25zKCkg
eworICAgIHZhciBvID0gb3V0ZXI7CisgICAgKG5ldyBNYXAobykpLmZvckVhY2goZm9vKTsKK30K
KworZnVuY3Rpb24gdGVzdFByb21pc2VzKCkgeworICAgIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHBy
b21pc2UocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgIHJlc29sdmUob3V0ZXIpOworICAgIH0p
LnRoZW4oZnVuY3Rpb24gcHJvbWlzZVRoZW4oeCkgeworICAgICAgICBjb25zb2xlLmxvZygiUHJv
bWlzZTogdGhlbiIpOworICAgICAgICB0ZXN0RXhjZXB0aW9ucyh4KTsKKyAgICB9KS5jYXRjaChm
dW5jdGlvbiBwcm9taXNlQ2F0Y2goZSkgeworICAgICAgICBjb25zb2xlLmxvZygiUHJvbWlzZTog
Y2F0Y2ggIiArIGUpOworICAgICAgICB0aHJvdyBlOyAvLyBUaHJvdyBwb2ludCAzLgorICAgIH0p
OworfQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHJl
dmlzaW9uIDE4NTE4MSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRp
b25zCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNiArMjIwLDggQEAgd2Via2l0Lm9yZy9iLzk4MzQ1
IGZhc3QvcGFyc2VyL2RvY3VtZW50LQogCiB3ZWJraXQub3JnL2IvMTQxMTIyIGVkaXRpbmcvc2Vs
ZWN0aW9uL3Byb2dyYW1tYXRpYy1zZWxlY3Rpb24tb24tbWFjLWlzLWRpcmVjdGlvbmxlc3MuaHRt
bCBbIFBhc3MgRmFpbHVyZSBdCiAKK3dlYmtpdC5vcmcvYi8xNDU2MjYgaW5zcGVjdG9yL2RlYnVn
Z2VyL2JyZWFrLW9uLWV4Y2VwdGlvbnMuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCisKICMjIyBFTkQg
T0YgKDEpIENsYXNzaWZpZWQgZmFpbHVyZXMgd2l0aCBidWcgcmVwb3J0cwogIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254257</attachid>
            <date>2015-06-04 00:37:13 -0700</date>
            <delta_ts>2015-06-05 11:15:10 -0700</delta_ts>
            <desc>patch 8: windows build fixed</desc>
            <filename>bug-145525.patch</filename>
            <type>text/plain</type>
            <size>170110</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzMSBA
QAorMjAxNS0wNi0wMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
ZmluYWxseSBibG9ja3Mgc2hvdWxkIG5vdCBzZXQgdGhlIGV4Y2VwdGlvbiBzdGFjayB0cmFjZSB3
aGVuIHJlLXRocm93aW5nIHRoZSBleGNlcHRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBIb3cgZXhjZXB0aW9ucyBwcmVzZW50bHkgd29yazoKKyAg
ICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgMS4gb3BfdGhyb3cg
Y2FuIHRocm93IGFueSBKU1ZhbHVlLgorICAgICAgICAyLiB0aGUgVk0gdHJpZXMgdG8gY2FwdHVy
ZSB0aGUgc3RhY2sgYXQgdGhlIHRocm93IHBvaW50IGFuZCBwcm9wYWdhdGUgdGhhdCBhcyBuZWVk
ZWQuCisgICAgICAgIDMuIGZpbmFsbHkgYmxvY2tzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBvcF9j
YXRjaCB0byBjYXRjaCB0aGUgdGhyb3duIHZhbHVlLCBhbmQgdGhyb3dzIGl0IGFnYWluIHVzaW5n
IG9wX3Rocm93LgorCisgICAgICAgIFdoYXTigJlzIHdyb25nIHdpdGggaG93IGl0IHByZXNlbnRs
eSB3b3JrczoKKyAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQorICAgICAgICAxLiBmaW5hbGx54oCZcyBtYWtlcyBmb3IgYmFkIGV4Y2VwdGlvbiB0aHJvdyBs
aW5lIG51bWJlcnMgaW4gdGhlIEluc3BlY3RvciBjb25zb2xlLgorCisgICAgICAgICAgIFRoZSBv
cF90aHJvdyBpbiBmaW5hbGx5IHdpbGwgdGhyb3cgdGhlIHZhbHVlIGFuZXcgaS5lLiBpdCBjYXB0
dXJlcyBhIHN0YWNrIGZyb20gdGhlIHJlLXRocm93IHBvaW50LgorICAgICAgICAgICBBcyBhIHJl
c3VsdCwgdGhlIEluc3BlY3RvciBzZWVzIHRoZSBmaW5hbGx5IGJsb2NrIGFzIHRoZSB0aHJvdyBw
b2ludC4gIFRoZSBvcmlnaW5hbCBzdGFjayBpcyBsb3N0LgorCisgICAgICAgIDIuIGZpbmFsbHni
gJlzIGJyZWFrcyB0aGUgSW5zcGVjdG9y4oCZcyDigJxCcmVha3Mgb24gVW5jYXVnaHQgRXhjZXB0
aW9u4oCdCisKKyAgICAgICAgICAgVGhpcyBpcyBiZWNhdXNlIGZpbmFsbHkgYmxvY2tzIGFyZSBp
bmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGNhdGNoIGJsb2Nrcy4gIEFzIGEgcmVzdWx0LCBhIHRyeS1m
aW5hbGx5LAorICAgICAgICAgICB3aGljaCBzaG91bGQgYnJlYWsgaW4gdGhlIEluc3BlY3RvciBv
biB0aGUgdGhyb3csIGRvZXMgbm90IGJlY2F1c2UgdGhlIEluc3BlY3RvciB0aG91Z2h0IHRoZQor
ICAgICAgICAgICBleGNlcHRpb24gd2FzIOKAnGNhdWdodOKAnS4KKworICAgICAgICAzLiBmaW5h
bGx54oCZcyB5aWVsZHMgY29uZnVzaW5nIGJyZWFrIHBvaW50cyB3aGVuIHRoZSBJbnNwZWN0b3Ig
4oCcQnJlYWtzIG9uIEFsbCBFeGNlcHRpb25z4oCdCisKKyAgICAgICAgICAgYS4gSW4gYSB0cnkt
ZmluYWxseSBzY2VuYXJpbywgdGhlIEluc3BlY3RvciBicmVha3MgMiB0aW1lczogMSBhdCB0aGUg
dGhyb3csIDEgYXQgdGhlIGZpbmFsbHkuCisgICAgICAgICAgIGIuIEluIGEgZm9yLW9mIGxvb3Ag
KHdoaWNoIGhhcyBzeW50aGVzaXplZCBmaW5hbGx5cyksIHRoZSBJbnNwZWN0b3Igd2lsbCBkbyBh
bm90aGVyIGJyZWFrLgorICAgICAgICAgICAgICBTaW1pbGFybHkgZm9yIG90aGVyIGNhc2VzIG9m
IEpTIGNvZGUgd2hpY2ggc3ludGhlc2l6ZSBmaW5hbGx5cy4KKyAgICAgICAgICAgYy4gQXQgVk0g
cmUtZW50cnkgYm91bmRhcmllcyAoZS5nLiBqcyB0aHJvd3MgJiByZXR1cm5zIHRvIG5hdGl2ZSBj
b2RlLCB3aGljaCByZXR1cm5zIHRvIGpzKSwKKyAgICAgICAgICAgICAgdGhlIEluc3BlY3RvciB3
aWxsIGRvIGFub3RoZXIgYnJlYWsgaWYgdGhlcmXigJlzIGFuIHVuY2F1Z2h0IGV4Y2VwdGlvbi4K
KworICAgICAgICBIb3cgdGhpcyBwYXRjaCBmaXhlcyB0aGUgaXNzdWVzOgorICAgICAgICA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIDEuIFdlIGludHJvZHVjZSBhbiBF
eGNlcHRpb24gb2JqZWN0IHRoYXQgd3JhcHMgdGhlIHRocm93biB2YWx1ZSBhbmQgdGhlIGV4Y2Vw
dGlvbiBzdGFjay4KKworICAgICAgICAgICBXaGVuIHRocm93aW5nIGFuIGV4Y2VwdGlvbiwgdGhl
IFZNIHdpbGwgY2hlY2sgaWYgdGhlIHRocm93biB2YWx1ZSBpcyBhbiBFeGNlcHRpb24KKyAgICAg
ICAgICAgb2JqZWN0IG9yIG5vdC4gIElmIGl0IGlzIG5vdCBhbiBFeGNlcHRpb24gb2JqZWN0LCB0
aGVuIHdlIG11c3QgYmUgdGhyb3duIGEgbmV3CisgICAgICAgICAgIGV4Y2VwdGlvbi4gIFRoZSBW
TSB3aWxsIGNyZWF0ZSBhbiBFeGNlcHRpb24gb2JqZWN0IHRvIHdyYXAgdGhlIHRocm93biB2YWx1
ZSBhbmQKKyAgICAgICAgICAgY2FwdHVyZSB0aGUgY3VycmVudCBzdGFjayBmb3IgaXQuCisKKyAg
ICAgICAgICAgSWYgdGhlIHRocm93biB2YWx1ZSBpcyBhbHJlYWR5IGFuIEV4Y2VwdGlvbiBvYmpl
Y3QsIHRoZW4gdGhlIHJlcXVlc3RlZCB0aHJvdyBvcGVyYXRpb24KKyAgICAgICAgICAgbXVzdCBi
ZSBhIHJlLXRocm93LiAgVGhlIFZNIHdpbGwgbm90IGNhcHR1cmUgYSBuZXcgc3RhY2sgZm9yIGl0
LgorCisgICAgICAgIDIuIG9wX2NhdGNoIHdpbGwgbm93IHBvcHVsYXRlIDIgbG9jYWxzOiAxIGZv
ciB0aGUgRXhjZXB0aW9uLCAxIGZvciB0aGUgdGhyb3duIEpTVmFsdWUuCisKKyAgICAgICAgICAg
VGhlIFZNIGlzIGF3YXJlIG9mIHRoZSBFeGNlcHRpb24gb2JqZWN0IGFuZCB1c2VzIGl0IGZvciBy
ZXRocm93cyBpbiBmaW5hbGx5IGJsb2Nrcy4KKyAgICAgICAgICAgSlMgc291cmNlIGNvZGUgaXMg
bmV2ZXIgYXdhcmUgb2YgdGhlIEV4Y2VwdGlvbiBvYmplY3QuCisKKyAgICAgICAgICAgSlMgY29k
ZSBpcyBhd2FyZSBvZiB0aGUgdGhyb3duIHZhbHVlLiAgSWYgaXQgdGhyb3dzIHRoZSBjYXVnaHQg
dGhyb3duIHZhbHVlLCB0aGF0CisgICAgICAgICAgIGNvbnN0aXR1dGVzIGEgbmV3IHRocm93LCBh
bmQgYSBuZXcgRXhjZXB0aW9uIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQgZm9yIGl0LgorCisgICAg
ICAgIDMuIFRoZSBWTSBubyBsb25nZXIgdHJhY2tzIHRoZSB0aHJvd24gSlNWYWx1ZSBhbmQgdGhl
IGV4Y2VwdGlvbiBzdGFjay4gIEl0IHdpbGwgb25seQorICAgICAgICAgICB0cmFjayBhIG1fZXhj
ZXB0aW9uIGZpZWxkIHdoaWNoIGlzIGFuIEV4Y2VwdGlvbiouCisKKyAgICAgICAgNC4gVGhlIEJ5
dGVjb2RlR2VuZXJhdG9yIGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCBpbiBhIHByaW9yIHBhdGNo
IHRvIGRpc3Rpbmd1aXNoCisgICAgICAgICAgIGJldHdlZW4gQ2F0Y2gsIEZpbmFsbHksIGFuZCBT
eW50aGVzaXplZEZpbmFsbHkgYmxvY2tzLiAgVGhlIGludGVycHJldGVyIHJ1bnRpbWUgd2lsbAor
ICAgICAgICAgICBub3cgcmVwb3J0IHRvIHRoZSBkZWJ1Z2dlciB3aGV0aGVyIHdlIGhhdmUgYSBD
YXRjaCBoYW5kbGVyLCBub3QganVzdCBhbnkgaGFuZGxlcnMuCisKKyAgICAgICAgICAgVGhlIGRl
YnVnZ2VyIHdpbGwgdXNlIHRoaXMgZGV0YWlsIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGJyZWFr
IG9yIG5vdC4gICJCcmVhayBvbgorICAgICAgICAgICB1bmNhdWdodCBleGNlcHRpb25zIiB3aWxs
IG9ubHkgYnJlYWsgaWYgbm8gQ2F0Y2ggaGFuZGxlciB3YXMgZm91bmQuCisKKyAgICAgICAgICAg
VGhpcyBzb2x2ZXMgdGhlIGlzc3VlIG9mIHRoZSBkZWJ1Z2dlciBicmVha2luZyBhdCBmaW5hbGx5
IGJsb2NrcywgYW5kIGZvci1vZiBzdGF0ZW1lbnRzLgorCisgICAgICAgIDUuIFRoZSBFeGNlcHRp
b24gb2JqZWN0IHdpbGwgYWxzbyBoYXZlIGEgZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBk
ZWJ1Z2dlciBoYXMgYmVlbgorICAgICAgICAgICBub3RpZmllZCBvZiB0aGUgRXhjZXB0aW9uIGJl
aW5nIHRocm93bi4gIE9uY2UgdGhlIEludGVycHJldGVyIG5vdGlmaWVzIHRoZSBkZWJ1Z2dlcgor
ICAgICAgICAgICBvZiB0aGUgRXhjZXB0aW9uIG9iamVjdCwgaXQgd2lsbCBtYXJrIHRoaXMgZmxh
ZyBhbmQgbm90IHJlcGVhdCB0aGUgbm90aWZ5IHRoZSBkZWJ1Z2dlcgorICAgICAgICAgICBhZ2Fp
biBvZiB0aGUgc2FtZSBFeGNlcHRpb24uCisKKyAgICAgICAgICAgVGhpcyBzb2x2ZXMgdGhlIGlz
c3VlIG9mIHRoZSBkZWJ1Z2dlciBicmVha2luZyBhdCBWTSByZS1lbnRyeSBwb2ludHMgZHVlIHRv
IHVuY2F1Z2h0CisgICAgICAgICAgIGV4Y2VwdGlvbnMuCisKKyAgICAgICAgNi4gVGhlIGxpZmUt
Y3ljbGUgb2YgdGhlIGNhcHR1cmVkIGV4Y2VwdGlvbiBzdGFjayB0cmFjZSB3aWxsIG5vdyBmb2xs
b3cgdGhlIGxpZmUtY3ljbGUKKyAgICAgICAgICAgb2YgdGhlIEV4Y2VwdGlvbiBvYmplY3QuCisK
KyAgICAgICAgT3RoZXIgY2hhbmdlczoKKyAgICAgICAgNy4gQ2hhbmdlIGFsbCBjbGllbnRzIG9m
IHRoZSBWTTo6ZXhjZXB0aW9uKCkgdG8gZXhwZWN0IGFuIEV4Y2VwdGlvbiogaW5zdGVhZCBvZiBK
U1ZhbHVlLgorCisgICAgICAgIDguIEZpeGVkIGEgZmV3IGJ1Z3Mgd2hlcmUgdGhyb3duIGV4Y2Vw
dGlvbnMgYXJlIG5vdCBjbGVhcmVkIGJlZm9yZSBleGl0aW5nIHRoZSBWTS4KKworICAgICAgICA5
LiBBbHNvIHJlbmFtZWQgc29tZSB2YXJpYWJsZXMgYW5kIGNsYXNzZXMgdG8gYmV0dGVyIGRlc2Ny
aWJlIHdoYXQgdGhleSBhcmUuCisKKyAgICAgICAgKiBBUEkvSlNCYXNlLmNwcDoKKyAgICAgICAg
KEpTRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAoSlNDaGVja1NjcmlwdFN5bnRheCk6CisKKyAg
ICAgICAgKiBBUEkvSlNPYmplY3RSZWYuY3BwOgorICAgICAgICAoaGFuZGxlRXhjZXB0aW9uSWZO
ZWVkZWQpOgorICAgICAgICAtIFRoZSBmdW5jdGlvbnMgYmVsb3cgYWxsIGRvIHRoZSBzYW1lIGV4
Y2VwdGlvbiBjaGVjay4gIEFkZGVkIHRoaXMgaGVscGVyCisgICAgICAgICAgdG8gc2ltcGxpZnkg
dGhlIGNvZGUuCisgICAgICAgIChKU0NsYXNzQ3JlYXRlKToKKyAgICAgICAgKEpTT2JqZWN0TWFr
ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTT2JqZWN0TWFrZUFycmF5KToKKyAgICAgICAgKEpTT2Jq
ZWN0TWFrZURhdGUpOgorICAgICAgICAoSlNPYmplY3RNYWtlRXJyb3IpOgorICAgICAgICAoSlNP
YmplY3RNYWtlUmVnRXhwKToKKyAgICAgICAgKEpTT2JqZWN0R2V0UHJvcGVydHkpOgorICAgICAg
ICAoSlNPYmplY3RTZXRQcm9wZXJ0eSk6CisgICAgICAgIChKU09iamVjdEdldFByb3BlcnR5QXRJ
bmRleCk6CisgICAgICAgIChKU09iamVjdFNldFByb3BlcnR5QXRJbmRleCk6CisgICAgICAgIChK
U09iamVjdERlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24p
OgorICAgICAgICAoSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3Rvcik6CisKKyAgICAgICAgKiBBUEkv
SlNTY3JpcHRSZWYuY3BwOgorICAgICAgICAqIEFQSS9KU1ZhbHVlLm1tOgorICAgICAgICAoSlND
b250YWluZXJDb252ZXJ0b3I6OnRha2UpOgorICAgICAgICAocmVwb3J0RXhjZXB0aW9uVG9JbnNw
ZWN0b3IpOgorCisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoaGFuZGxl
RXhjZXB0aW9uSWZOZWVkZWQpOgorICAgICAgICAtIFRoZSBmdW5jdGlvbnMgYmVsb3cgYWxsIGRv
IHRoZSBzYW1lIGV4Y2VwdGlvbiBjaGVjay4gIEFkZGVkIHRoaXMgaGVscGVyCisgICAgICAgICAg
dG8gc2ltcGxpZnkgdGhlIGNvZGUuCisgICAgICAgIChldmVybm90ZUhhY2tOZWVkZWQpOgorICAg
ICAgICAoSlNWYWx1ZUlzRXF1YWwpOgorICAgICAgICAoSlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0
cnVjdG9yKToKKyAgICAgICAgKEpTVmFsdWVDcmVhdGVKU09OU3RyaW5nKToKKyAgICAgICAgKEpT
VmFsdWVUb051bWJlcik6CisgICAgICAgIChKU1ZhbHVlVG9TdHJpbmdDb3B5KToKKyAgICAgICAg
KEpTVmFsdWVUb09iamVjdCk6CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgLSBBZGRlZCBuZXcgZmlsZXMgRXhjZXB0aW9uLmggYW5kIEV4Y2VwdGlvbi5jcHAuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwOgorICAgICAgICAoRGVw
cmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9T
Y3JpcHRGdW5jdGlvbkNhbGwuaDoKKworICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5q
c29uOgorICAgICAgICAtIG9wX2NhdGNoIG5vdyBoYWQgMiBvcGVyYW5kczogdGhlIGV4Y2VwdGlv
biByZWdpc3RlciwgYW5kIHRoZSB0aHJvd24gdmFsdWUgcmVnaXN0ZXIuCisKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5
dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suaDoKKyAgICAgICAgLSBoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoKSBub3cgY2FuIGxvb2sg
Zm9yIGp1c3QgQ2F0Y2ggaGFuZGxlcnMgb25seS4KKworICAgICAgICAqIGJ5dGVjb2RlL0hhbmRs
ZXJJbmZvLmg6CisgICAgICAgIC0gQ2xlYW5lZCB1cCBzb21lIHdoaXRlIHNwYWNlIEkgYWNjaWRl
bnRhbGx5IGFkZGVkIGluIGEgcHJldmlvdXMgcGF0Y2guCisKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6cHVzaFRyeSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BUcnlBbmRF
bWl0Q2F0Y2gpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRocm93UmVm
ZXJlbmNlRXJyb3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1l
cmF0aW9uKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUaHJvdyk6CisgICAgICAgICogYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlRyeU5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgIC0gQWRkaW5nIHN1cHBvcnQgZm9yIG9wX2NhdGNoJ3MgMiBvcGVy
YW5kcy4KKworICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpTQzo6
RGVidWdnZXI6Omhhc0JyZWFrcG9pbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6cGF1c2VJ
Zk5lZWRlZCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpleGNlcHRpb24pOgorICAgICAgICAq
IGRlYnVnZ2VyL0RlYnVnZ2VyLmg6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJh
bWUuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6dGhpc1ZhbHVlKToKKyAg
ICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBkZWJ1
Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFt
ZTo6aXNWYWxpZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5j
cHA6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYXRlSW5q
ZWN0ZWRTY3JpcHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9ubWVudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xs
ZXI6OmFwcGVuZEFQSUJhY2t0cmFjZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVwb3J0QVBJRXhjZXB0aW9uKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICog
aW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0ph
dmFTY3JpcHRDYWxsRnJhbWUuaDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SmF2YVNjcmlwdENhbGxG
cmFtZTo6dm1FbnRyeUdsb2JhbE9iamVjdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkphdmFTY3Jp
cHRDYWxsRnJhbWU6OnRoaXNWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkphdmFTY3JpcHRD
YWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNr
RmFjdG9yeS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmV4dHJhY3RTb3VyY2VJbmZvcm1hdGlv
bkZyb21FeGNlcHRpb24pOgorICAgICAgICAoSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRDYWxsU3Rh
Y2tGcm9tRXhjZXB0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFj
dG9yeS5oOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAg
ICAgIChJbnNwZWN0b3I6OlNjcmlwdERlYnVnU2VydmVyOjpldmFsdWF0ZUJyZWFrcG9pbnRBY3Rp
b24pOgorICAgICAgICAoSW5zcGVjdG9yOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlQnJlYWtw
b2ludEhpdCk6CisgICAgICAgIChJbnNwZWN0b3I6OlNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVF
eGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9TY3Jp
cHREZWJ1Z1NlcnZlci5oOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAg
ICAgICAoSlNDOjpFeGVjU3RhdGU6OmNsZWFyRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6RXhl
Y1N0YXRlOjpleGNlcHRpb24pOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmhhZEV4Y2VwdGlv
bik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6YXRvbWljU3RyaW5nVGFibGUpOgorICAgICAg
ICAoSlNDOjpFeGVjU3RhdGU6OnByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpFeGVjU3Rh
dGU6OmNsZWFyU3VwcGxlbWVudGFyeUV4Y2VwdGlvbkluZm8pOiBEZWxldGVkLgorCisgICAgICAg
ICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjp1bndpbmRDYWxs
RnJhbWUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6c3RhY2tUcmFjZUFzU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6R2V0Q2F0Y2hIYW5kbGVyRnVuY3Rvcjo6R2V0Q2F0Y2hIYW5kbGVyRnVu
Y3Rvcik6CisgICAgICAgIChKU0M6OkdldENhdGNoSGFuZGxlckZ1bmN0b3I6Om9wZXJhdG9yKCkp
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5kKToKKyAgICAgICAgLSBBZGRlZCBh
IGNoZWNrIGZvciBkaWROb3RpZnlJbnNwZWN0b3JPZlRocm93KCkgaGVyZSB0byBwcmV2ZW50IGR1
cGxpY2F0ZSByZXBvcnRzCisgICAgICAgICAgb2YgdGhlIHNhbWUgRXhjZXB0aW9uIHRvIHRoZSBk
ZWJ1Z2dlci4KKworICAgICAgICAoSlNDOjpHZXRFeGNlcHRpb25IYW5kbGVyRnVuY3Rvcjo6R2V0
RXhjZXB0aW9uSGFuZGxlckZ1bmN0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHZXRFeGNl
cHRpb25IYW5kbGVyRnVuY3Rvcjo6b3BlcmF0b3IoKSk6IERlbGV0ZWQuCisgICAgICAgIC0gUmVu
YW1lZCBHZXRFeGNlcHRpb25IYW5kbGVyRnVuY3RvciB0byBHZXRDYXRjaEhhbmRsZXJGdW5jdG9y
IHNpbmNlIHRoZSBkZWJ1Z2dlcgorICAgICAgICAgIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiBrbm93
aW5nIHdoZXRoZXIgd2UgaGF2ZSBDYXRjaCBoYW5kbGVycy4KKworICAgICAgICAqIGludGVycHJl
dGVyL0ludGVycHJldGVyLmg6CisgICAgICAgIChKU0M6OlN1c3BlbmRFeGNlcHRpb25TY29wZTo6
U3VzcGVuZEV4Y2VwdGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6U3VzcGVuZEV4Y2VwdGlvblNj
b3BlOjp+U3VzcGVuZEV4Y2VwdGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OnNhbXBsZXIpOgorICAgICAgICAoSlNDOjpDbGVhckV4Y2VwdGlvblNjb3BlOjpDbGVhckV4Y2Vw
dGlvblNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2xlYXJFeGNlcHRpb25TY29wZTo6
fkNsZWFyRXhjZXB0aW9uU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAtIFJlbmFtZWQgQ2xlYXJF
eGNlcHRpb25TY29wZSB0byBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgYmVjYXVzZSAiY2xlYXIiIGlt
cGxpZXMgdGhhdAorICAgICAgICAgIHdlJ3JlIHB1cmdpbmcgdGhlIGV4Y2VwdGlvbi4gIEluc3Rl
YWQsIHdlJ3JlIG1lcmVseSBzdXNwZW5kaW5nIGFueSBoYW5kbGluZyBvZgorICAgICAgICAgIHRo
YXQgZXhjZXB0aW9uIGZvciBhIHBlcmlvZCBkZWZpbmVkIGJ5IHRoZSBzY29wZS4KKworICAgICAg
ICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmVtaXRFeGNlcHRpb25DaGVjayk6CisKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5j
cHA6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAtIFJlbW92ZWQgdGhl
IGV4Y2VwdGlvbiBhcmd1bWVudC4gIEl0IGlzIGFsd2F5cyB0aGUgdmFsdWUgaW4gVk06OmV4Y2Vw
dGlvbigpIGFueXdheS4KKyAgICAgICAgICBnZW5lcmljVW53aW5kKCkgY2FuIGp1c3QgZ2V0IGl0
IGZyb20gdGhlIFZNLCBhbmQgc2F2ZSBldmVyeW9uZSBzb21lIHdvcmsuCisKKyAgICAgICAgKiBq
aXQvSklURXhjZXB0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAtIEFkZCBzdXBw
b3J0IGZvciB0aGUgbmV3IG9wX2NhdGNoIG9wZXJhbmRzLgorCisgICAgICAgICogaml0L0pJVE9w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAg
ICAoSlNDOjpuYXRpdmVGb3JHZW5lcmF0b3IpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAg
IChmdW5jdGlvblJ1bik6CisgICAgICAgIChmdW5jdGlvbkxvYWQpOgorICAgICAgICAocnVuV2l0
aFNjcmlwdHMpOgorICAgICAgICAocnVuSW50ZXJhY3RpdmUpOgorICAgICAgICAqIGxsaW50L0xM
SW50T2Zmc2V0c0V4dHJhY3Rvci5jcHA6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorCisgICAg
ICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAtIEFkZCBzdXBwb3J0IGZvciB0
aGUgbmV3IG9wX2NhdGNoIG9wZXJhbmRzLiAgQWxzbyB1cGRhdGUgdGhlIGNvZGUgdG8gaGFuZGxl
CisgICAgICAgICAgVk06Om1fZXhjZXB0aW9uIGJlaW5nIGFuIEV4Y2VwdGlvbiBwb2ludGVyLCBu
b3QgYSBKU1ZhbHVlLgorCisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAg
ICAgICAgKEpTQzo6VHJ5Tm9kZTo6VHJ5Tm9kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6
CisgICAgICAgICogcnVudGltZS9DYWxsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OmNhbGwpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ2FsbERhdGEuaDoKKworICAgICAgICAqIHJ1bnRpbWUvQ29tcGxl
dGlvbi5jcHA6CisgICAgICAgIChKU0M6OmV2YWx1YXRlKToKKyAgICAgICAgKiBydW50aW1lL0Nv
bXBsZXRpb24uaDoKKyAgICAgICAgKEpTQzo6ZXZhbHVhdGUpOgorICAgICAgICAtIENoYW5nZSBl
dmFsdWF0ZSgpIHRvIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlIHJldHVybmVkIGV4Y2VwdGlvbiB2
YWx1ZSBpbnN0ZWFkCisgICAgICAgICAgb2YgYSBwb2ludGVyLiAgSW4gYWxsIGJ1dCAyIG9yIDMg
Y2FzZXMsIHdlIHdhbnQgdGhlIHJldHVybmVkIGV4Y2VwdGlvbiBhbnl3YXkuCisgICAgICAgICAg
TWlnaHQgYXMgd2VsbCBzaW1wbGlmeSB0aGUgY29kZSBieSByZXF1aXJpbmcgdGhlIHJlZmVyZW5j
ZS4KKworICAgICAgICAqIHJ1bnRpbWUvRXJyb3IuaDoKKyAgICAgICAgKEpTQzo6dGhyb3dWTUVy
cm9yKToKKyAgICAgICAgKEpTQzo6dGhyb3dWTVR5cGVFcnJvcik6CisKKyAgICAgICAgKiBydW50
aW1lL0V4Y2VwdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpFeGNlcHRpb246OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OkV4Y2VwdGlvbjo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkV4
Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RXhjZXB0aW9uOjp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6RXhjZXB0aW9uOjpFeGNlcHRpb24pOgorICAgICAg
ICAoSlNDOjpFeGNlcHRpb246On5FeGNlcHRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0
aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpFeGNlcHRpb246OnZhbHVlT2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6RXhjZXB0aW9uOjpjYXN0KToKKyAgICAgICAgKEpTQzo6RXhjZXB0aW9uOjp2
YWx1ZSk6CisgICAgICAgIChKU0M6OkV4Y2VwdGlvbjo6c3RhY2spOgorICAgICAgICAoSlNDOjpF
eGNlcHRpb246OmRpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3cpOgorICAgICAgICAoSlNDOjpFeGNl
cHRpb246OnNldERpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3cpOgorCisgICAgICAgICogcnVudGlt
ZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlVGVybWluYXRlZEV4
ZWN1dGlvbkV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OmlzVGVybWluYXRlZEV4ZWN1dGlvbkV4
Y2VwdGlvbik6CisgICAgICAgIChKU0M6OmNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcik6CisgICAg
ICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg6CisgICAgICAgICogcnVudGltZS9HZXR0
ZXJTZXR0ZXIuY3BwOgorICAgICAgICAoSlNDOjpjYWxsR2V0dGVyKToKKyAgICAgICAgKiBydW50
aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yQ2xvc2Up
OgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNQ
cm9taXNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RQcm9taXNlKToK
KyAgICAgICAgKiBydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcDoKKyAgICAgICAgKEpTQzo6
dXBkYXRlRGVmZXJyZWRGcm9tUG90ZW50aWFsVGhlbmFibGUpOgorICAgICAgICAoSlNDOjphYnJ1
cHRSZWplY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlUmVhY3Rpb24uY3BwOgor
ICAgICAgICAoSlNDOjpFeGVjdXRlUHJvbWlzZVJlYWN0aW9uTWljcm90YXNrOjpydW4pOgorCisg
ICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAg
IChKU0M6OlZNOjpyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6OlZNOjp0
aHJvd0V4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OlZNOjpzZXRTdGFja1BvaW50ZXJBdFZNRW50
cnkpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0RXhjZXB0aW9uSW5mbyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlZNOjpzZXRFeGNlcHRpb25JbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Vk06OmNsZWFyRXhjZXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Y2xlYXJFeGNlcHRp
b25TdGFjayk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlND
OjpWTTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dPZmZzZXQpOgorICAgICAgICAoSlNDOjpWTTo6
Y2xlYXJFeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpWTTo6c2V0RXhjZXB0aW9uKToKKyAgICAg
ICAgKEpTQzo6Vk06OmV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OlZNOjphZGRyZXNzT2ZFeGNl
cHRpb24pOgorICAgICAgICAoSlNDOjpWTTo6ZXhjZXB0aW9uU3RhY2spOiBEZWxldGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1FbnRyeVNj
b3BlOjpWTUVudHJ5U2NvcGUpOgorICAgICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6OnNldEVudHJ5
U2NvcGVEaWRQb3BMaXN0ZW5lcik6CisKIDIwMTUtMDYtMDEgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBDYWxsTGlua1N0YXR1cyBzaG91bGQgcmV0dXJuIHRha2Vz
U2xvd1BhdGggaWYgdGhlIEdDIG9mdGVuIGNsZWFyZWQgdGhlIElDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQ1NCw2ICs0NTQsNyBA
QCBzZXQoSmF2YVNjcmlwdENvcmVfUlVOVElNRV9TT1VSQ0VTCiAgICAgcnVudGltZS9FcnJvckhh
bmRsaW5nU2NvcGUuY3BwCiAgICAgcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAogICAgIHJ1bnRp
bWUvRXJyb3JQcm90b3R5cGUuY3BwCisgICAgcnVudGltZS9FeGNlcHRpb24uY3BwCiAgICAgcnVu
dGltZS9FeGNlcHRpb25GdXp6LmNwcAogICAgIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAK
ICAgICBydW50aW1lL0V4ZWN1dGFibGUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2
aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCiAjaW5jbHVk
ZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1
ZGUgIkhlYXBTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgpA
QCAtODk5LDEzICs5MDAsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blJ1bgogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KAogICAgICAgICBleGVjLT52bSgpLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAiYXJndW1l
bnRzIiksIGFycmF5KTsKIAotICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIEV4Y2VwdGlvbiog
ZXhjZXB0aW9uOwogICAgIFN0b3BXYXRjaCBzdG9wV2F0Y2g7CiAgICAgc3RvcFdhdGNoLnN0YXJ0
KCk7Ci0gICAgZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShz
Y3JpcHQuZGF0YSgpLCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgJmV4Y2VwdGlvbik7CisgICAgZXZh
bHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHQuZGF0YSgp
LCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgZXhjZXB0aW9uKTsKICAgICBzdG9wV2F0Y2guc3RvcCgp
OwogCi0gICAgaWYgKCEhZXhjZXB0aW9uKSB7CisgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAg
ICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBl
eGNlcHRpb24pOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIH0KQEAgLTkyMiw4ICs5MjMsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uTG9hCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIAotICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2Vw
dGlvbjsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksICZl
dmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBFeGNlcHRpb24qIGV2YWx1YXRpb25FeGNlcHRpb247
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSwganNjU291cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCBldmFsdWF0
aW9uRXhjZXB0aW9uKTsKICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC0xMjg1LDE1ICsxMjg2LDE1IEBAIHN0
YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKIAogICAgICAgICB2bS5zdGFy
dFNhbXBsaW5nKCk7CiAKLSAgICAgICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAg
ICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIGpzY1NvdXJjZShzY3JpcHQsIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCAmZXZhbHVhdGlv
bkV4Y2VwdGlvbik7CisgICAgICAgIEV4Y2VwdGlvbiogZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAg
ICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgZXZhbHVhdGlv
bkV4Y2VwdGlvbik7CiAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmICFldmFsdWF0aW9uRXhj
ZXB0aW9uOwogICAgICAgICBpZiAoZHVtcCAmJiAhZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAg
ICAgICAgIHByaW50ZigiRW5kOiAlc1xuIiwgcmV0dXJuVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRm
OCgpLmRhdGEoKSk7CiAgICAgICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKSB7Ci0gICAgICAg
ICAgICBwcmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGV2YWx1YXRpb25FeGNlcHRpb24udG9TdHJp
bmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjog
JXNcbiIsIGV2YWx1YXRpb25FeGNlcHRpb24tPnZhbHVlKCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgp
LmRhdGEoKSk7CiAgICAgICAgICAgICBJZGVudGlmaWVyIHN0YWNrSUQgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAic3RhY2siKTsKLSAgICAgICAg
ICAgIEpTVmFsdWUgc3RhY2tWYWx1ZSA9IGV2YWx1YXRpb25FeGNlcHRpb24uZ2V0KGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBzdGFja0lEKTsKKyAgICAgICAgICAgIEpTVmFsdWUgc3RhY2tW
YWx1ZSA9IGV2YWx1YXRpb25FeGNlcHRpb24tPnZhbHVlKCkuZ2V0KGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpLCBzdGFja0lEKTsKICAgICAgICAgICAgIGlmICghc3RhY2tWYWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHN0YWNrVmFsdWUu
dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIH0KQEAgLTEzNDksOCArMTM1
MCw4IEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKLSAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKHNvdXJjZSwgaW50ZXJwcmV0ZXJOYW1lKSwgSlNWYWx1
ZSgpLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgICAgIEV4Y2VwdGlvbiogZXZhbHVhdGlv
bkV4Y2VwdGlvbjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKHNvdXJjZSwgaW50ZXJwcmV0ZXJOYW1l
KSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbHNlCiAgICAgICAgIHByaW50
ZigiJXMiLCBpbnRlcmFjdGl2ZVByb21wdCk7CiAgICAgICAgIFZlY3RvcjxjaGFyLCAyNTY+IGxp
bmU7CkBAIC0xMzY1LDExICsxMzY2LDExIEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZlKEds
b2JhbE9iamVjdCoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBsaW5lLmFwcGVuZCgnXDAn
KTsKIAotICAgICAgICBKU1ZhbHVlIGV2YWx1YXRpb25FeGNlcHRpb247Ci0gICAgICAgIEpTVmFs
dWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNj
U291cmNlKGxpbmUuZGF0YSgpLCBpbnRlcnByZXRlck5hbWUpLCBKU1ZhbHVlKCksICZldmFsdWF0
aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgRXhjZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOwor
ICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksIGpzY1NvdXJjZShsaW5lLmRhdGEoKSwgaW50ZXJwcmV0ZXJOYW1lKSwgSlNWYWx1
ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbmRpZgogICAgICAgICBpZiAoZXZhbHVhdGlv
bkV4Y2VwdGlvbikKLSAgICAgICAgICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVh
dGlvbkV4Y2VwdGlvbi50b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVl
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
IHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKS50
b1N0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSktPnZhbHVlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
cHJpbnRmKCIlc1xuIiwgcmV0dXJuVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCkpLT52YWx1ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHJldmlzaW9uIDE4NTE4
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNsdWRlICJDYWxs
RnJhbWUuaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgi
CiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRo
cmVhZGluZy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCkBAIC02MywxMiArNjQsMTIg
QEAgSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2NyaXB0KEpTQ29udGV4dFJlZgogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCk7CiAgICAg
U291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291cmNlKHNjcmlwdC0+c3RyaW5nKCksIHNvdXJjZVVS
TCA/IHNvdXJjZVVSTC0+c3RyaW5nKCkgOiBTdHJpbmcoKSwgVGV4dFBvc2l0aW9uKE9yZGluYWxO
dW1iZXI6OmZyb21PbmVCYXNlZEludChzdGFydGluZ0xpbmVOdW1iZXIpLCBPcmRpbmFsTnVtYmVy
OjpmaXJzdCgpKSk7CiAKLSAgICBKU1ZhbHVlIGV2YWx1YXRpb25FeGNlcHRpb247Ci0gICAgSlNW
YWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBz
b3VyY2UsIGpzVGhpc09iamVjdCwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgIEV4Y2VwdGlv
biogZXZhbHVhdGlvbkV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVh
dGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHNvdXJjZSwganNUaGlzT2JqZWN0LCBldmFs
dWF0aW9uRXhjZXB0aW9uKTsKIAogICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKSB7CiAgICAg
ICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywg
ZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhl
YywgZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKSk7CiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCiAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBoYXZlIGEgZGVidWdnZXIgYXR0YWNoZWQg
d2UgY291bGQgbGVhcm4gYWJvdXQgUGFyc2VFcnJvciBleGNlcHRpb25zIHRocm91Z2gKICAgICAg
ICAgLy8gU2NyaXB0RGVidWdTZXJ2ZXI6OnNvdXJjZVBhcnNlZCBhbmQgdGhpcyBwYXRoIGNvdWxk
IHByb2R1Y2UgYSBkdXBsaWNhdGUgd2FybmluZy4gVGhlCkBAIC0xMDcsNyArMTA4LDggQEAgYm9v
bCBKU0NoZWNrU2NyaXB0U3ludGF4KEpTQ29udGV4dFJlZiBjdAogICAgICAgICBpZiAoZXhjZXB0
aW9uKQogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIHN5bnRheEV4Y2VwdGlv
bik7CiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlH
bG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihl
eGVjLCBzeW50YXhFeGNlcHRpb24pOworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IEV4
Y2VwdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN5bnRheEV4Y2VwdGlvbik7CisgICAgICAgIGV4
ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQ
SUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNw
cAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVj
dFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDb3Bp
ZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJEYXRlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJFcnJvckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAi
RnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRl
ICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCkBAIC02MSw2ICs2MiwyMSBAQAogCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCitzdGF0aWMgYm9vbCBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWVSZWYqIHJldHVybmVkRXhjZXB0aW9uUmVmKQoreworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGV4
ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb25SZWYpCisgICAg
ICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb25SZWYgPSB0b1JlZihleGVjLCBleGNlcHRpb24tPnZh
bHVlKCkpOworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQorICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKKyNl
bmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CiBKU0NsYXNzUmVmIEpTQ2xhc3NDcmVhdGUoY29uc3QgSlNDbGFzc0RlZmluaXRpb24qIGRlZmlu
aXRpb24pCiB7CiAgICAgaW5pdGlhbGl6ZVRocmVhZGluZygpOwpAQCAtMTQ4LDE2ICsxNjQsOCBA
QCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VGdW5jdGlvbihKU0NvbnRlCiAgICAgYXJncy5hcHBl
bmQoanNTdHJpbmcoZXhlYywgYm9keS0+c3RyaW5nKCkpKTsKIAogICAgIEpTT2JqZWN0KiByZXN1
bHQgPSBjb25zdHJ1Y3RGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGFyZ3MsIG5hbWVJRCwgc291cmNlVVJMID8gc291cmNlVVJMLT5zdHJpbmcoKSA6IFN0cmluZygp
LCBUZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHN0YXJ0aW5nTGlu
ZU51bWJlciksIE9yZGluYWxOdW1iZXI6OmZpcnN0KCkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2Vw
dGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRy
eUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9u
KGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25J
Zk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAgICAgICByZXN1bHQgPSAwOwotICAgIH0KICAg
ICByZXR1cm4gdG9SZWYocmVzdWx0KTsKIH0KIApAQCAtMTgwLDE2ICsxODgsOCBAQCBKU09iamVj
dFJlZiBKU09iamVjdE1ha2VBcnJheShKU0NvbnRleHRSCiAgICAgfSBlbHNlCiAgICAgICAgIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CiAKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4
Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlv
biA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1F
bnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0
aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRp
b25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAgICAgICByZXN1bHQgPSAwOwotICAgIH0K
IAogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQpAQCAtMjA4LDE2ICsyMDgsOCBAQCBKU09i
amVjdFJlZiBKU09iamVjdE1ha2VEYXRlKEpTQ29udGV4dFJlCiAgICAgICAgIGFyZ0xpc3QuYXBw
ZW5kKHRvSlMoZXhlYywgYXJndW1lbnRzW2ldKSk7CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0g
Y29uc3RydWN0RGF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGFyZ0xpc3Qp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0g
ICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9S
KQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisg
ICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAgICAgICAg
IHJlc3VsdCA9IDA7Ci0gICAgfQogCiAgICAgcmV0dXJuIHRvUmVmKHJlc3VsdCk7CiB9CkBAIC0y
MzUsMTYgKzIyNyw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUVycm9yKEpTQ29udGV4dFIK
ICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5lcnJvclN0cnVjdHVyZSgpOwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBFcnJvckluc3Rh
bmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UpOwogCi0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBl
eGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpl
eGNlcHRpb24gPSB0b1JlZihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4
ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQ
SUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxl
RXhjZXB0aW9uSWZOZWVkZWQoZXhlYywgZXhjZXB0aW9uKSkKICAgICAgICAgcmVzdWx0ID0gMDsK
LSAgICB9CiAKICAgICByZXR1cm4gdG9SZWYocmVzdWx0KTsKIH0KQEAgLTI2MywxNiArMjQ3LDgg
QEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlUmVnRXhwKEpTQ29udGV4dAogICAgICAgICBhcmdM
aXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGFyZ3VtZW50c1tpXSkpOwogCiAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IGNvbnN0cnVjdFJlZ0V4cChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
ICBhcmdMaXN0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNW
YWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhj
ZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZh
bHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0
b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsK
LSNlbmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24p
KQogICAgICAgICByZXN1bHQgPSAwOwotICAgIH0KICAgICAKICAgICByZXR1cm4gdG9SZWYocmVz
dWx0KTsKIH0KQEAgLTMzOSwxNSArMzE1LDcgQEAgSlNWYWx1ZVJlZiBKU09iamVjdEdldFByb3Bl
cnR5KEpTQ29udGV4dAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKIAog
ICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lLT5p
ZGVudGlmaWVyKCZleGVjLT52bSgpKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVj
LCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmpl
Y3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNl
cHRpb25WYWx1ZSk7Ci0jZW5kaWYKLSAgICB9CisgICAgaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQo
ZXhlYywgZXhjZXB0aW9uKTsKICAgICByZXR1cm4gdG9SZWYoZXhlYywganNWYWx1ZSk7CiB9CiAK
QEAgLTM3MiwxNSArMzQwLDcgQEAgdm9pZCBKU09iamVjdFNldFByb3BlcnR5KEpTQ29udGV4dFJl
ZiBjdAogICAgICAgICBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KGpzT2JqZWN0LCBleGVj
LCBuYW1lLCBqc1ZhbHVlLCBzbG90KTsKICAgICB9CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlv
bigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRv
UmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUds
b2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4
ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0KKyAgICBoYW5kbGVFeGNlcHRpb25J
Zk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogfQogCiBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJv
cGVydHlBdEluZGV4KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCwgdW5zaWdu
ZWQgcHJvcGVydHlJbmRleCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAtMzk1LDE1ICszNTUs
NyBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KEpTCiAgICAgSlNPYmpl
Y3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNP
YmplY3QtPmdldChleGVjLCBwcm9wZXJ0eUluZGV4KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlv
bigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRv
UmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUds
b2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4
ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0KKyAgICBoYW5kbGVFeGNlcHRpb25J
Zk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVybiB0b1JlZihleGVjLCBqc1ZhbHVl
KTsKIH0KIApAQCAtNDIxLDE1ICszNzMsNyBAQCB2b2lkIEpTT2JqZWN0U2V0UHJvcGVydHlBdElu
ZGV4KEpTQ29udGV4CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CiAg
ICAgCiAgICAganNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoanNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5SW5kZXgsIGpzVmFsdWUsIGZhbHNlKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2Vw
dGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRy
eUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9u
KGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0KKyAgICBoYW5kbGVFeGNlcHRp
b25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogfQogCiBib29sIEpTT2JqZWN0RGVsZXRlUHJv
cGVydHkoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1N0cmluZ1JlZiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKQEAgLTQ0NCwxNSArMzg4LDcgQEAg
Ym9vbCBKU09iamVjdERlbGV0ZVByb3BlcnR5KEpTQ29udGV4dFJlZgogICAgIEpTT2JqZWN0KiBq
c09iamVjdCA9IHRvSlMob2JqZWN0KTsKIAogICAgIGJvb2wgcmVzdWx0ID0ganNPYmplY3QtPm1l
dGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KGpzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUt
PmlkZW50aWZpZXIoJmV4ZWMtPnZtKCkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
IHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwot
ICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4
ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNp
ZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9i
amVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4
Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0KKyAgICBoYW5kbGVFeGNlcHRpb25JZk5lZWRl
ZChleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTYxNiwxNiAr
NTUyLDggQEAgSlNWYWx1ZVJlZiBKU09iamVjdENhbGxBc0Z1bmN0aW9uKEpTQ29udAogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gdG9SZWYoZXhlYywgY2FsbChl
eGVjLCBqc09iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1RoaXNPYmplY3QsIGFyZ0xpc3Qp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNl
cHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQot
ICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9s
bGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgor
ICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAgICAg
ICByZXN1bHQgPSAwOwotICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC02NTcsMTYg
KzU4NSw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoSlMKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7IGkrKykKICAgICAgICAgYXJnTGlz
dC5hcHBlbmQodG9KUyhleGVjLCBhcmd1bWVudHNbaV0pKTsKICAgICBKU09iamVjdFJlZiByZXN1
bHQgPSB0b1JlZihjb25zdHJ1Y3QoZXhlYywganNPYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0
cnVjdERhdGEsIGFyZ0xpc3QpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAg
ICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAg
ICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4
Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFC
TEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
blZhbHVlKTsKLSNlbmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBl
eGNlcHRpb24pKQogICAgICAgICByZXN1bHQgPSAwOwotICAgIH0KICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVmLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVmLmNwcAko
cmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFJl
Zi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkFQSUNh
c3QuaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAj
aW5jbHVkZSAiSlNCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNT
Y3JpcHRSZWZQcml2YXRlLmgiCkBAIC0xNDIsMTIgKzE0MywxMiBAQCBKU1ZhbHVlUmVmIEpTU2Ny
aXB0RXZhbHVhdGUoSlNDb250ZXh0UmVmCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBKU1ZhbHVlIGludGVybmFsRXhj
ZXB0aW9uOworICAgIEV4Y2VwdGlvbiogaW50ZXJuYWxFeGNlcHRpb247CiAgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSB0aGlzVmFsdWVSZWYgPyB0b0pTKGV4ZWMsIHRoaXNWYWx1ZVJlZikgOiBqc1Vu
ZGVmaW5lZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoZXhlYywgU291cmNlQ29k
ZShzY3JpcHQpLCB0aGlzVmFsdWUsICZpbnRlcm5hbEV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBldmFsdWF0ZShleGVjLCBTb3VyY2VDb2RlKHNjcmlwdCksIHRoaXNWYWx1ZSwgaW50
ZXJuYWxFeGNlcHRpb24pOwogICAgIGlmIChpbnRlcm5hbEV4Y2VwdGlvbikgewogICAgICAgICBp
ZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGludGVy
bmFsRXhjZXB0aW9uKTsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBpbnRl
cm5hbEV4Y2VwdGlvbi0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBB
U1NFUlQocmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0JKHJl
dmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2ltcG9ydCAiQVBJQ2FzdC5oIgogI2lt
cG9ydCAiRGF0ZUluc3RhbmNlLmgiCiAjaW1wb3J0ICJFcnJvci5oIgorI2ltcG9ydCAiRXhjZXB0
aW9uLmgiCiAjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5oIgogI2ltcG9ydCAiSlNDb250ZXh0SW50
ZXJuYWwuaCIKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgpAQCAtNjQ1LDkg
KzY0NiwxMCBAQCBKU0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayBKU0NvbnRhaW5lckNvCiB9CiAK
ICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLXN0YXRpYyB2b2lkIHJlcG9ydEV4Y2VwdGlv
blRvSW5zcGVjdG9yKEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU0M6OkpTVmFsdWUgZXhj
ZXB0aW9uKQorc3RhdGljIHZvaWQgcmVwb3J0RXhjZXB0aW9uVG9JbnNwZWN0b3IoSlNHbG9iYWxD
b250ZXh0UmVmIGNvbnRleHQsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb25WYWx1ZSkKIHsKICAgICBK
U0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNDOjpFeGNlcHRpb24q
IGV4Y2VwdGlvbiA9IEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9u
VmFsdWUpOwogICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogfQogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAJKHJldmlzaW9uIDE4
NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNs
dWRlICJEYXRlSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJK
U0FQSVdyYXBwZXJPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZS5oIgpAQCAtNTIsNiArNTMsMjEgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAorc3RhdGljIGJvb2wgaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlUmVmKiByZXR1cm5lZEV4Y2VwdGlvblJlZikKK3sKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBleGVjLT5leGNlcHRp
b24oKTsKKyAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uUmVmKQorICAgICAgICAgICAgKnJl
dHVybmVkRXhjZXB0aW9uUmVmID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uLT52YWx1ZSgpKTsKKyAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKKyAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9s
bGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisjZW5kaWYKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogI2lmIFBMQVRG
T1JNKE1BQykKIHN0YXRpYyBib29sIGV2ZXJub3RlSGFja05lZWRlZCgpCiB7CkBAIC0yMjQsMTUg
KzI0MCw4IEBAIGJvb2wgSlNWYWx1ZUlzRXF1YWwoSlNDb250ZXh0UmVmIGN0eCwgSlMKICAgICBK
U1ZhbHVlIGpzQiA9IHRvSlMoZXhlYywgYik7CiAKICAgICBib29sIHJlc3VsdCA9IEpTVmFsdWU6
OmVxdWFsKGV4ZWMsIGpzQSwganNCKTsgLy8gZmFsc2UgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93
bgotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0g
ICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9S
KQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0g
ICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAg
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjY2LDE1ICsyNzUsNyBAQCBib29sIEpTVmFs
dWVJc0luc3RhbmNlT2ZDb25zdHJ1Y3RvcihKU0NvCiAgICAgaWYgKCFqc0NvbnN0cnVjdG9yLT5z
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGJvb2wgcmVzdWx0ID0ganNDb25zdHJ1Y3Rvci0+aGFzSW5zdGFu
Y2UoZXhlYywganNWYWx1ZSk7IC8vIGZhbHNlIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24KLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25W
YWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAg
ICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAg
ICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCku
cmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0K
KyAgICBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTM2OCwxNiArMzY5LDggQEAgSlNTdHJpbmdSZWYgSlNWYWx1ZUNy
ZWF0ZUpTT05TdHJpbmcoSlNDbwogICAgIFN0cmluZyByZXN1bHQgPSBKU09OU3RyaW5naWZ5KGV4
ZWMsIHZhbHVlLCBpbmRlbnQpOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICpleGNlcHRp
b24gPSAwOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVl
IGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRp
b24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUp
OwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2Vu
ZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIH0KICAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OmNyZWF0
ZShyZXN1bHQpLmxlYWtSZWYoKTsKIH0KIApAQCAtNDA2LDE2ICszOTksOCBAQCBkb3VibGUgSlNW
YWx1ZVRvTnVtYmVyKEpTQ29udGV4dFJlZiBjdHgsCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9K
UyhleGVjLCB2YWx1ZSk7CiAKICAgICBkb3VibGUgbnVtYmVyID0ganNWYWx1ZS50b051bWJlcihl
eGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9u
KQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsK
LSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRp
ZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pKQogICAg
ICAgICBudW1iZXIgPSBQTmFOOwotICAgIH0KICAgICByZXR1cm4gbnVtYmVyOwogfQogCkBAIC00
MzEsMTYgKzQxNiw4IEBAIEpTU3RyaW5nUmVmIEpTVmFsdWVUb1N0cmluZ0NvcHkoSlNDb250ZXgK
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKICAgICAKICAgICBSZWZQ
dHI8T3BhcXVlSlNTdHJpbmc+IHN0cmluZ1JlZihPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKGpzVmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRp
b24oKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0
b1JlZihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlH
bG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihl
eGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZO
ZWVkZWQoZXhlYywgZXhjZXB0aW9uKSkKICAgICAgICAgc3RyaW5nUmVmLmNsZWFyKCk7Ci0gICAg
fQogICAgIHJldHVybiBzdHJpbmdSZWYucmVsZWFzZSgpLmxlYWtSZWYoKTsKIH0KIApAQCAtNDU2
LDE2ICs0MzMsOCBAQCBKU09iamVjdFJlZiBKU1ZhbHVlVG9PYmplY3QoSlNDb250ZXh0UmVmCiAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CiAgICAgCiAgICAgSlNPYmpl
Y3RSZWYgb2JqZWN0UmVmID0gdG9SZWYoanNWYWx1ZS50b09iamVjdChleGVjKSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUg
PSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAg
ICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAg
IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9y
dEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFu
ZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywgZXhjZXB0aW9uKSkKICAgICAgICAgb2JqZWN0UmVm
ID0gMDsKLSAgICB9CiAgICAgcmV0dXJuIG9iamVjdFJlZjsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MTIsNiArNzEyLDcgQEAKICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JIYW5kbGluZ1Njb3BlLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JJbnN0YW5jZS5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEVycm9yUHJvdG90eXBlLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uRnV6ei5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlvbkhlbHBlcnMuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGVjdXRhYmxlLmNwcCIgLz4KQEAgLTE1MDMs
NiArMTUwNCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEVycm9ySGFu
ZGxpbmdTY29wZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJv
ckluc3RhbmNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEVycm9y
UHJvdG90eXBlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2Vw
dGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb25G
dXp6LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlvbkhl
bHBlcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhlY3V0YWJs
ZS5oIiAvPgpAQCAtMTgyNyw0ICsxODI5LDQgQEAKICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRl
bnNpb25UYXJnZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcQnVp
bGRDdXN0b21pemF0aW9uc1xtYXNtLnRhcmdldHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1By
b2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNp
b24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjk4
LDYgKzE2OTgsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhbHVlU3Ry
ZW5ndGguY3BwIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlvbi5jcHAiPgorICAg
ICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlvbkZ1enouY3BwIj4KICAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtNDE5MCw2ICs0MTkzLDkg
QEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYWx1ZVN0cmVuZ3RoLmgiPgog
ICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uLmgiPgorICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEV4Y2VwdGlvbkZ1enouaCI+CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTQ0ODUsNCArNDQ5MSw0IEBACiAgICAgICA8RmlsdGVy
PmppdDwvRmlsdGVyPgogICAgIDwvTUFTTT4KICAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjYwLDYgKzE2NjAsOCBAQAogCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0OURDMTQ5MTJFRjI2MUEwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNh
Y2hlSXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUZFMEQ0QTA2MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ0QTA0
MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCAqLzsgfTsKIAkJ
RkUwRDRBMDkxQUJBMjQzNzAwMkY1NEJGIC8qIEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTBE
NEEwNzFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNw
cCAqLzsgfTsKKwkJRkUxQzBGRkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxQzBGRkMxQjE5M0U5
ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUZFMUMwRkZGMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxQzBG
RkUxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgKi87IH07CiAJCUZFMjBDRTlEMTVG
MDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlCMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENM
b29wLmNwcCAqLzsgfTsKIAkJRkUyMENFOUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3Au
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlD
MTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUzODRFRTUxQUREQjdBRDAwNTVERTJDIC8qIEpT
RG9sbGFyVk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkUzODRFRTExQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uY3BwICovOyB9OwpAQCAt
MzQ2Myw2ICszNDY1LDggQEAKIAkJRkUwRDRBMDUxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlv
blRpbWVMaW1pdFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRXhlY3V0
aW9uVGltZUxpbWl0VGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDcxQUJBMjQzNzAwMkY1
NEJGIC8qIEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuY3Bw
OyBwYXRoID0gQVBJL3Rlc3RzL0dsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ0QTA4MUFCQTI0MzcwMDJGNTRCRiAvKiBH
bG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0Lmg7IHBhdGggPSBBUEkvdGVz
dHMvR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50
Q0xvb3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRDTG9v
cC5jcHA7IHBhdGggPSBsbGludC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJ
bnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTM4NEVFMTFBRERCN0FE
MDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0RvbGxhclZNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0
MjcsNiArNDQzMSw4IEBACiAJCQkJQkMwMkU5OEIwRTE4M0UzODAwMEY5Mjk3IC8qIEVycm9ySW5z
dGFuY2UuaCAqLywKIAkJCQlCQzAyRTkwNjBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5
cGUuY3BwICovLAogCQkJCUJDMDJFOTA3MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlw
ZS5oICovLAorCQkJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywK
KwkJCQlGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0aW9uLmNwcCAqLywKIAkJCQkw
RjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYx
MkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkxNDI5RDg3
NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBAIC01NjI0LDYg
KzU2MzAsNyBAQAogCQkJCUZFNEQ1NUI4MUFFNzE2Q0EwMDUyRTQ1OSAvKiBJdGVyYXRpb25TdGF0
dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZl
cnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0NDJDQjI1MUE2Q0RCOEMwMDVE
M0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCisJCQkJRkUxQzBGRkQxQjE5M0U5
ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOTExQTA0
MTc3QzAwNkEzMDZEIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1RUE3MTBFMTlGNkRGODEwMDk4RjVFQyAvKiBJbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtNzQwOCw2ICs3NDE1LDcg
QEAKIAkJCQk3QzAwOENEQTE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0MwMDhDRDIxODZGOEE5MzAwOTU1QzI0IC8qIEpTUHJvbWlz
ZUZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzE4NEUxRTE3QkVFMjJFMDA3Q0I2
M0EgLyogSlNQcm9taXNlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFMUMwRkZG
MUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA5
RkI4NkIxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0MwMDhDREUxODcxMjU4RDAwOTU1QzI0IC8qIEpTUHJvbWlzZVJlYWN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2MjU1M0QxMTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzMsMTEgKzEzMywxMSBAQCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSBTY3JpcHRGdW5jdGlvbkNhCiAgICAgICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSgpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAg
RXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgaWYgKG1fY2FsbEhhbmRsZXIpCi0gICAgICAgIHJl
c3VsdCA9IG1fY2FsbEhhbmRsZXIobV9leGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCB0aGlzT2JqZWN0LCBtX2FyZ3VtZW50cywgJmV4Y2VwdGlvbik7CisgICAgICAgIHJlc3VsdCA9
IG1fY2FsbEhhbmRsZXIobV9leGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlz
T2JqZWN0LCBtX2FyZ3VtZW50cywgZXhjZXB0aW9uKTsKICAgICBlbHNlCi0gICAgICAgIHJlc3Vs
dCA9IEpTQzo6Y2FsbChtX2V4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNP
YmplY3QsIG1fYXJndW1lbnRzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgcmVzdWx0ID0gSlNDOjpj
YWxsKG1fZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc09iamVjdCwgbV9h
cmd1bWVudHMsIGV4Y2VwdGlvbik7CiAKICAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAgICAgIGhh
ZEV4Y2VwdGlvbiA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
U2NyaXB0RnVuY3Rpb25DYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZB
VEUgU2NyaXB0RnVuY3Rpb25DYWxsIDogcHVibGljIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIg
ewogcHVibGljOgotICAgIHR5cGVkZWYgSlNDOjpKU1ZhbHVlICgqU2NyaXB0RnVuY3Rpb25DYWxs
SGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEs
IEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpK
U1ZhbHVlKiBleGNlcHRpb24pOworICAgIHR5cGVkZWYgSlNDOjpKU1ZhbHVlICgqU2NyaXB0RnVu
Y3Rpb25DYWxsSGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5j
dGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYg
Y2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJn
cywgSlNDOjpFeGNlcHRpb24qJiBleGNlcHRpb24pOwogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbChj
b25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgU2NyaXB0
RnVuY3Rpb25DYWxsSGFuZGxlciBoYW5kbGVyID0gbnVsbHB0cik7CiAgICAgU2NyaXB0VmFsdWUg
Y2FsbChib29sJiBoYWRFeGNlcHRpb24pOwogICAgIFNjcmlwdFZhbHVlIGNhbGwoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24J
KHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9wdXNoX3dpdGhfc2NvcGUiLCAibGVuZ3RoIiA6IDMgfSwKICAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3BvcF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAogICAg
ICAgICAgICAgeyAibmFtZSIgOiAib3BfcHVzaF9uYW1lX3Njb3BlIiwgImxlbmd0aCIgOiA1IH0s
Ci0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYXRjaCIsICJsZW5ndGgiIDogMiB9LAorICAg
ICAgICAgICAgeyAibmFtZSIgOiAib3BfY2F0Y2giLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX3Rocm93IiwgImxlbmd0aCIgOiAyIH0sCiAgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF90aHJvd19zdGF0aWNfZXJyb3IiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX2RlYnVnIiwgImxlbmd0aCIgOiAzIH0sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkocmV2aXNp
b24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNl
RGVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwMyw3ICszMDMsNiBAQCB2b2lkIGNvbXB1dGVEZWZz
Rm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgogICAg
IGNhc2Ugb3Bfc3RyY2F0OgogICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgotICAgIGNhc2Ugb3Bf
Y2F0Y2g6CiAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKICAgICBjYXNlIG9wX25ld19hcnJheToK
ICAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6CkBAIC0zNzQsNiArMzczLDcgQEAgdm9pZCBj
b21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogICAgICAgICBmdW5jdG9yKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2Ugb3BfY2F0Y2g6CiAgICAgY2FzZSBvcF9j
cmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogewogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAg
ICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDg0LDcgKzE0ODQsOSBA
QCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
b3BfY2F0Y2g6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiY2F0Y2giLCByMCk7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImNhdGNoIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdp
c3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF90aHJvdzogewpAQCAtMjg3OCw3
ICsyODgwLDcgQEAgYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KAogfQog
I2VuZGlmCiAKLUhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNl
dCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0hhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRs
ZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgYm9vbCByZXF1aXJl
Q2F0Y2hIYW5kbGVyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIApAQCAtMjg4OCw2ICsyODkwLDkgQEAgSGFuZGxlckluZm8q
IENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjbwogICAgIFZlY3RvcjxIYW5kbGVySW5mbz4mIGV4
Y2VwdGlvbkhhbmRsZXJzID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyczsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGV4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcnNbaV07CisgICAg
ICAgIGlmIChyZXF1aXJlQ2F0Y2hIYW5kbGVyICYmICFoYW5kbGVyLmlzQ2F0Y2hIYW5kbGVyKCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICAvLyBIYW5kbGVycyBhcmUgb3JkZXJl
ZCBpbm5lcm1vc3QgZmlyc3QsIHNvIHRoZSBmaXJzdCBoYW5kbGVyIHdlIGVuY291bnRlcgogICAg
ICAgICAvLyB0aGF0IGNvbnRhaW5zIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyB0aGUgY29ycmVjdCBo
YW5kbGVyIHRvIHVzZS4KICAgICAgICAgaWYgKGhhbmRsZXIuc3RhcnQgPD0gYnl0ZWNvZGVPZmZz
ZXQgJiYgaGFuZGxlci5lbmQgPiBieXRlY29kZU9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MTg1LDcgKzE4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGluZGV4ID49IG1fbnVtVmFy
czsKICAgICB9CiAKLSAgICBIYW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBIYW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVj
b2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBib29sIHJlcXVpcmVDYXRjaEhhbmRs
ZXIgPSBmYWxzZSk7CiAgICAgdW5zaWduZWQgbGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICB1bnNpZ25lZCBjb2x1bW5OdW1iZXJGb3JCeXRl
Y29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAgdm9pZCBleHByZXNzaW9u
UmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZv
dCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5o
CShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFu
ZGxlckluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBlbnVtIGNsYXNzIEhh
bmRsZXJUeXBlIHsKIHN0cnVjdCBIYW5kbGVySW5mb0Jhc2UgewogICAgIEhhbmRsZXJUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxIYW5kbGVyVHlwZT4odHlwZUJpdHMpOyB9
CiAgICAgdm9pZCBzZXRUeXBlKEhhbmRsZXJUeXBlIHR5cGUpIHsgdHlwZUJpdHMgPSBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4odHlwZSk7IH0KLSAgICAKKwogICAgIGNvbnN0IGNoYXIqIHR5cGVOYW1l
KCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CkBAIC01NSw5ICs1NSw5IEBAIHN0
cnVjdCBIYW5kbGVySW5mb0Jhc2UgewogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KLSAgICAKKwogICAgIGJvb2wgaXNDYXRjaEhhbmRsZXIoKSBjb25zdCB7IHJldHVy
biB0eXBlKCkgPT0gSGFuZGxlclR5cGU6OkNhdGNoOyB9Ci0gICAgCisKICAgICB1aW50MzJfdCBz
dGFydDsKICAgICB1aW50MzJfdCBlbmQ7CiAgICAgdWludDMyX3QgdGFyZ2V0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTI4
LDcgKzI1MjgsNyBAQCBUcnlEYXRhKiBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFRyeShMYWJlCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnBv
cFRyeUFuZEVtaXRDYXRjaChUcnlEYXRhKiB0cnlEYXRhLCBSZWdpc3RlcklEKiB0YXJnZXRSZWdp
c3RlciwgTGFiZWwqIGVuZCwgSGFuZGxlclR5cGUgaGFuZGxlclR5cGUpCit2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwb3BUcnlBbmRFbWl0Q2F0Y2goVHJ5RGF0YSogdHJ5RGF0YSwgUmVnaXN0ZXJJ
RCogZXhjZXB0aW9uUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHRocm93blZhbHVlUmVnaXN0ZXIsIExh
YmVsKiBlbmQsIEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBlKQogewogICAgIG1fdXNlc0V4Y2VwdGlv
bnMgPSB0cnVlOwogICAgIApAQCAtMjU0Niw4ICsyNTQ2LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OnBvcFRyeUFuZAogICAgIHRyeVJhbmdlLnRyeURhdGEtPmhhbmRsZXJUeXBl
ID0gaGFuZGxlclR5cGU7CiAKICAgICBlbWl0T3Bjb2RlKG9wX2NhdGNoKTsKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQodGFyZ2V0UmVnaXN0ZXItPmluZGV4KCkpOwotICAgIHJldHVybiB0YXJn
ZXRSZWdpc3RlcjsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZXhjZXB0aW9uUmVnaXN0ZXIt
PmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0aHJvd25WYWx1ZVJlZ2lzdGVy
LT5pbmRleCgpKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRocm93UmVmZXJl
bmNlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtMjc2MCw3ICsyNzYwLDExIEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbigKICAgICAgICAgLy8gSXRlcmF0
b3JDbG9zZSBzZXF1ZW5jZSBmb3IgdGhyb3ctZWQgY29udHJvbCBmbG93LgogICAgICAgICB7CiAg
ICAgICAgICAgICBSZWZQdHI8TGFiZWw+IGNhdGNoSGVyZSA9IGVtaXRMYWJlbChuZXdMYWJlbCgp
LmdldCgpKTsKLSAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNlcHRpb25SZWdpc3Rl
ciA9IHBvcFRyeUFuZEVtaXRDYXRjaCh0cnlEYXRhLCBuZXdUZW1wb3JhcnkoKSwgY2F0Y2hIZXJl
LmdldCgpLCBIYW5kbGVyVHlwZTo6U3ludGhlc2l6ZWRGaW5hbGx5KTsKKyAgICAgICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBleGNlcHRpb25SZWdpc3RlciA9IG5ld1RlbXBvcmFyeSgpOworICAg
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRocm93blZhbHVlUmVnaXN0ZXIgPSBuZXdUZW1w
b3JhcnkoKTsKKyAgICAgICAgICAgIHBvcFRyeUFuZEVtaXRDYXRjaCh0cnlEYXRhLCBleGNlcHRp
b25SZWdpc3Rlci5nZXQoKSwKKyAgICAgICAgICAgICAgICB0aHJvd25WYWx1ZVJlZ2lzdGVyLmdl
dCgpLCBjYXRjaEhlcmUuZ2V0KCksIEhhbmRsZXJUeXBlOjpTeW50aGVzaXplZEZpbmFsbHkpOwor
CiAgICAgICAgICAgICBSZWZQdHI8TGFiZWw+IGNhdGNoRG9uZSA9IG5ld0xhYmVsKCk7CiAKICAg
ICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5NZXRob2QgPSBlbWl0R2V0QnlJZChu
ZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFtZXMoKS5yZXR1cm5LZXl3
b3JkKTsKQEAgLTI3NzgsNyArMjc4Miw4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRF
bnVtZXJhdGlvbigKICAgICAgICAgICAgIGVtaXRUaHJvdyhleGNlcHRpb25SZWdpc3Rlci5nZXQo
KSk7CiAKICAgICAgICAgICAgIC8vIEFic29yYiBleGNlcHRpb24uCi0gICAgICAgICAgICBwb3BU
cnlBbmRFbWl0Q2F0Y2gocmV0dXJuQ2FsbFRyeURhdGEsIG5ld1RlbXBvcmFyeSgpLCBjYXRjaERv
bmUuZ2V0KCksIEhhbmRsZXJUeXBlOjpTeW50aGVzaXplZEZpbmFsbHkpOworICAgICAgICAgICAg
cG9wVHJ5QW5kRW1pdENhdGNoKHJldHVybkNhbGxUcnlEYXRhLCBuZXdUZW1wb3JhcnkoKSwKKyAg
ICAgICAgICAgICAgICBuZXdUZW1wb3JhcnkoKSwgY2F0Y2hEb25lLmdldCgpLCBIYW5kbGVyVHlw
ZTo6U3ludGhlc2l6ZWRGaW5hbGx5KTsKICAgICAgICAgICAgIGVtaXRUaHJvdyhleGNlcHRpb25S
ZWdpc3Rlci5nZXQoKSk7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24g
MTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NTMsNyArNTUzLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIC8vIFN0YXJ0IGEgdHJ5IGJsb2NrLiAnc3RhcnQnIG11c3QgaGF2ZSBiZWVu
IGVtaXR0ZWQuCiAgICAgICAgIFRyeURhdGEqIHB1c2hUcnkoTGFiZWwqIHN0YXJ0KTsKICAgICAg
ICAgLy8gRW5kIGEgdHJ5IGJsb2NrLiAnZW5kJyBtdXN0IGhhdmUgYmVlbiBlbWl0dGVkLgotICAg
ICAgICBSZWdpc3RlcklEKiBwb3BUcnlBbmRFbWl0Q2F0Y2goVHJ5RGF0YSosIFJlZ2lzdGVySUQq
IHRhcmdldFJlZ2lzdGVyLCBMYWJlbCogZW5kLCBIYW5kbGVyVHlwZSk7CisgICAgICAgIHZvaWQg
cG9wVHJ5QW5kRW1pdENhdGNoKFRyeURhdGEqLCBSZWdpc3RlcklEKiBleGNlcHRpb25SZWdpc3Rl
ciwgUmVnaXN0ZXJJRCogdGhyb3duVmFsdWVSZWdpc3RlciwgTGFiZWwqIGVuZCwgSGFuZGxlclR5
cGUpOwogCiAgICAgICAgIHZvaWQgZW1pdFRocm93KFJlZ2lzdGVySUQqIGV4YykKICAgICAgICAg
eyAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg4MSw3
ICsyODgxLDkgQEAgdm9pZCBUcnlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcgogCiAg
ICAgICAgIC8vIFVuY2F1Z2h0IGV4Y2VwdGlvbiBwYXRoOiB0aGUgY2F0Y2ggYmxvY2suCiAgICAg
ICAgIFJlZlB0cjxMYWJlbD4gaGVyZSA9IGdlbmVyYXRvci5lbWl0TGFiZWwoZ2VuZXJhdG9yLm5l
d0xhYmVsKCkuZ2V0KCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVn
aXN0ZXIgPSBnZW5lcmF0b3IucG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwgaGVyZS5nZXQoKSwgSGFuZGxlclR5cGU6OkNhdGNoKTsKKyAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhyb3duVmFsdWVSZWdpc3RlciA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcFRyeUFuZEVt
aXRDYXRjaCh0cnlEYXRhLCBleGNlcHRpb25SZWdpc3Rlci5nZXQoKSwgdGhyb3duVmFsdWVSZWdp
c3Rlci5nZXQoKSwgaGVyZS5nZXQoKSwgSGFuZGxlclR5cGU6OkNhdGNoKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChtX2ZpbmFsbHlCbG9jaykgewogICAgICAgICAgICAgLy8gSWYgdGhlIGNhdGNo
IGJsb2NrIHRocm93cyBhbiBleGNlcHRpb24gYW5kIHdlIGhhdmUgYSBmaW5hbGx5IGJsb2NrLCB0
aGVuIHRoZSBmaW5hbGx5CkBAIC0yODg5LDcgKzI4OTEsNyBAQCB2b2lkIFRyeU5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyCiAgICAgICAgICAgICB0cnlEYXRhID0gZ2VuZXJhdG9yLnB1
c2hUcnkoaGVyZS5nZXQoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBnZW5lcmF0b3IuZW1pdFB1
c2hDYXRjaFNjb3BlKGdlbmVyYXRvci5zY29wZVJlZ2lzdGVyKCksIG1fZXhjZXB0aW9uSWRlbnQs
IGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLCBEb250RGVsZXRlKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQdXNoQ2F0Y2hTY29wZShnZW5lcmF0b3Iuc2NvcGVSZWdpc3RlcigpLCBtX3Rocm93blZh
bHVlSWRlbnQsIHRocm93blZhbHVlUmVnaXN0ZXIuZ2V0KCksIERvbnREZWxldGUpOwogICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhtX3RyeUJsb2NrLT5lbmRPZmZzZXQo
KSArIDEpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2NhdGNoQmxvY2spOwog
ICAgICAgICBnZW5lcmF0b3IuZW1pdFBvcFNjb3BlKGdlbmVyYXRvci5zY29wZVJlZ2lzdGVyKCkp
OwpAQCAtMjkxMiwxMCArMjkxNCwxMiBAQCB2b2lkIFRyeU5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyCiAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChmaW5hbGx5RW5kTGFiZWwuZ2V0
KCkpOwogCiAgICAgICAgIC8vIFVuY2F1Z2h0IGV4Y2VwdGlvbiBwYXRoOiBpbnZva2UgdGhlIGZp
bmFsbHkgYmxvY2ssIHRoZW4gcmUtdGhyb3cgdGhlIGV4Y2VwdGlvbi4KLSAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHRlbXBFeGNlcHRpb25SZWdpc3RlciA9IGdlbmVyYXRvci5wb3BUcnlBbmRF
bWl0Q2F0Y2godHJ5RGF0YSwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcmVGaW5hbGx5TGFi
ZWwuZ2V0KCksIEhhbmRsZXJUeXBlOjpGaW5hbGx5KTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhyb3duVmFsdWVSZWdpc3RlciA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcFRyeUFuZEVtaXRDYXRjaCh0cnlEYXRh
LCBleGNlcHRpb25SZWdpc3Rlci5nZXQoKSwgdGhyb3duVmFsdWVSZWdpc3Rlci5nZXQoKSwgcHJl
RmluYWxseUxhYmVsLmdldCgpLCBIYW5kbGVyVHlwZTo6RmluYWxseSk7CiAgICAgICAgIGdlbmVy
YXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KGZpbmFsbHlTdGFydE9mZnNldCk7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fZmluYWxseUJsb2NrKTsKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRUaHJvdyh0ZW1wRXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdFRocm93KGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKIAogICAgICAgICBnZW5l
cmF0b3IuZW1pdExhYmVsKGZpbmFsbHlFbmRMYWJlbC5nZXQoKSk7CiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KG1fZmluYWxseUJsb2NrLT5lbmRPZmZzZXQoKSArIDEp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShy
ZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODcsNyArNDg3LDcgQEAgYm9vbCBEZWJ1Z2dlcjo6
aGFzQnJlYWtwb2ludChTb3VyY2VJRCBzbwogICAgIC8vIHNvIG1ha2UgaXQgbG9va3MgbGlrZSB0
aGUgZGVidWdnZXIgaXMgYWxyZWFkeSBwYXVzZWQuCiAgICAgVGVtcG9yYXJ5UGF1c2VkU3RhdGUg
cGF1c2VkU3RhdGUoKnRoaXMpOwogCi0gICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgRXhjZXB0
aW9uKiBleGNlcHRpb247CiAgICAgRGVidWdnZXJDYWxsRnJhbWUqIGRlYnVnZ2VyQ2FsbEZyYW1l
ID0gY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBkZWJ1
Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoYnJlYWtwb2ludC0+Y29uZGl0aW9uLCBleGNlcHRpb24p
OwogCkBAIC02OTUsMTMgKzY5NSwxMyBAQCB2b2lkIERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKENh
bGxGcmFtZSogCiAgICAgfQogfQogCi12b2lkIERlYnVnZ2VyOjpleGNlcHRpb24oQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTVmFsdWUgZXhjZXB0aW9uLCBib29sIGhhc0hhbmRsZXIpCit2b2lkIERl
YnVnZ2VyOjpleGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgZXhjZXB0aW9u
LCBib29sIGhhc0NhdGNoSGFuZGxlcikKIHsKICAgICBpZiAobV9pc1BhdXNlZCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgUGF1c2VSZWFzb25EZWNsYXJhdGlvbiByZWFzb24oKnRoaXMsIFBhdXNl
ZEZvckV4Y2VwdGlvbik7Ci0gICAgaWYgKG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9PSBQYXVz
ZU9uQWxsRXhjZXB0aW9ucyB8fCAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25V
bmNhdWdodEV4Y2VwdGlvbnMgJiYgIWhhc0hhbmRsZXIpKSB7CisgICAgaWYgKG1fcGF1c2VPbkV4
Y2VwdGlvbnNTdGF0ZSA9PSBQYXVzZU9uQWxsRXhjZXB0aW9ucyB8fCAobV9wYXVzZU9uRXhjZXB0
aW9uc1N0YXRlID09IFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnMgJiYgIWhhc0NhdGNoSGFuZGxl
cikpIHsKICAgICAgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7CiAgICAgICAgIHNl
dFN0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVFbmFibGVkKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkocmV2aXNpb24gMTg1MTgxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFy
c2VkKEV4ZWNTdGF0ZSosIFNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZU51bWJlciwgY29u
c3QgV1RGOjpTdHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwogCi0gICAgdm9pZCBleGNlcHRpb24o
Q2FsbEZyYW1lKiwgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgYm9vbCBoYXNIYW5kbGVyKTsKKyAg
ICB2b2lkIGV4Y2VwdGlvbihDYWxsRnJhbWUqLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBib29s
IGhhc0NhdGNoSGFuZGxlcik7CiAgICAgdm9pZCBhdFN0YXRlbWVudChDYWxsRnJhbWUqKTsKICAg
ICB2b2lkIGNhbGxFdmVudChDYWxsRnJhbWUqKTsKICAgICB2b2lkIHJldHVybkV2ZW50KENhbGxG
cmFtZSopOwpAQCAtMTI0LDcgKzEyNCw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIGJvb2wgbmVlZFBhdXNlSGFuZGxpbmcoSlNHbG9iYWxPYmplY3QqKSB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCcmVha3BvaW50SGl0KEpTR2xvYmFsT2JqZWN0
KiwgY29uc3QgQnJlYWtwb2ludCYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRp
b25JbkJyZWFrcG9pbnRDb25kaXRpb24oRXhlY1N0YXRlKiwgSlNWYWx1ZSBleGNlcHRpb24pIGNv
bnN0IHsgVU5VU0VEX1BBUkFNKGV4Y2VwdGlvbik7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
RXhjZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKEV4ZWNTdGF0ZSosIEV4Y2VwdGlvbiopIGNv
bnN0IHsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQYXVzZShKU0dsb2JhbE9iamVjdCosIFJl
YXNvbkZvclBhdXNlKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RG9uZVByb2Nlc3NpbmdE
ZWJ1Z2dlckV2ZW50cygpIHsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJEZWJ1Z2dlckV2YWxFbmFibGVyLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJTY29wZS5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5j
bHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCkBA
IC0xNzYsNyArMTc3LDcgQEAgSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6dGhpc1ZhbHVlKCkg
YwogfQogCiAvLyBFdmFsdWF0ZSBzb21lIEphdmFTY3JpcHQgY29kZSBpbiB0aGUgc2NvcGUgb2Yg
dGhpcyBmcmFtZS4KLUpTVmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnN0IFN0
cmluZyYgc2NyaXB0LCBKU1ZhbHVlJiBleGNlcHRpb24pCitKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZy
YW1lOjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgRXhjZXB0aW9uKiYgZXhjZXB0aW9u
KQogewogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
bV9jYWxsRnJhbWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJDYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJDYWxsRnJhbWUuaAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDYgKzM4LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBEZWJ1Z2dlclNjb3BlOwor
Y2xhc3MgRXhjZXB0aW9uOwogY2xhc3MgRXhlY1N0YXRlOwogdHlwZWRlZiBFeGVjU3RhdGUgQ2Fs
bEZyYW1lOwogCkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBTdHJpbmcgZnVuY3Rpb25OYW1lKCkgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgVHlw
ZSB0eXBlKCkgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0aGlzVmFsdWUo
KSBjb25zdDsKLSAgICBKU1ZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0cmluZyYsIEpTVmFsdWUmIGV4
Y2VwdGlvbik7CisgICAgSlNWYWx1ZSBldmFsdWF0ZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb24q
Jik7CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhIW1fY2FsbEZyYW1lOyB9
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbnZhbGlkYXRlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1h
bmFnZXIuY3BwCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw5
ICsxMzksOSBAQCBEZXByZWNhdGVkOjpTY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRNCiAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCk7CiAgICAgSlNWYWx1ZSBnbG9iYWxUaGlzVmFsdWUgPSBzY3JpcHRTdGF0ZS0+Z2xv
YmFsVGhpc1ZhbHVlKCk7CiAKLSAgICBKU1ZhbHVlIGV2YWx1YXRpb25FeGNlcHRpb247CisgICAg
RXhjZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgIEluc3BlY3RvckV2YWx1YXRlSGFu
ZGxlciBldmFsdWF0ZUhhbmRsZXIgPSBtX2Vudmlyb25tZW50LmV2YWx1YXRlSGFuZGxlcigpOwot
ICAgIEpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGV2YWx1YXRlSGFuZGxlcihzY3JpcHRTdGF0ZSwg
c291cmNlQ29kZSwgZ2xvYmFsVGhpc1ZhbHVlLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAg
SlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gZXZhbHVhdGVIYW5kbGVyKHNjcmlwdFN0YXRlLCBzb3Vy
Y2VDb2RlLCBnbG9iYWxUaGlzVmFsdWUsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAgIGlmIChl
dmFsdWF0aW9uRXhjZXB0aW9uKQogICAgICAgICByZXR1cm4gRGVwcmVjYXRlZDo6U2NyaXB0T2Jq
ZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckVudmlyb25tZW50LmgJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRW52aXJvbm1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsMTMgKzMzLDE0IEBAIGNsYXNzIFN0b3B3YXRjaDsKIH0KIAogbmFtZXNwYWNl
IEpTQyB7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBTb3VyY2VDb2RlOwogfQogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBKU0M6OkpTVmFsdWUgKCpJbnNwZWN0b3JGdW5jdGlv
bkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9u
T2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiBjYWxs
RGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBK
U0M6OkpTVmFsdWUqIGV4Y2VwdGlvbik7Ci10eXBlZGVmIEpTQzo6SlNWYWx1ZSAoKkluc3BlY3Rv
ckV2YWx1YXRlSGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUm
LCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbik7Cit0eXBl
ZGVmIEpTQzo6SlNWYWx1ZSAoKkluc3BlY3RvckZ1bmN0aW9uQ2FsbEhhbmRsZXIpKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUg
Y2FsbFR5cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJu
ZWRFeGNlcHRpb24pOwordHlwZWRlZiBKU0M6OkpTVmFsdWUgKCpJbnNwZWN0b3JFdmFsdWF0ZUhh
bmRsZXIpKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiwgSlNDOjpKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKIGNs
YXNzIEluc3BlY3RvckVudmlyb25tZW50IHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNvbXBsZXRp
b24uaCIKICNpbmNsdWRlICJDb25zb2xlTWVzc2FnZS5oIgogI2luY2x1ZGUgIkVycm9ySGFuZGxp
bmdTY29wZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkluamVjdGVkU2Ny
aXB0SG9zdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0TWFuYWdlci5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvckFnZW50LmgiCkBAIC0xODgsNyArMTg5LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVj
dEluc3BlY3RvckNvbnRyb2xsZXI6OgogI2VuZGlmCiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3RJ
bnNwZWN0b3JDb250cm9sbGVyOjpyZXBvcnRBUElFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGV4Y2VwdGlvbikKK3ZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVy
OjpyZXBvcnRBUElFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlv
bikKIHsKICAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbikp
CiAgICAgICAgIHJldHVybjsKQEAgLTIwMSw3ICsyMDIsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0
SW5zcGVjdG9yQ29udHJvbGxlcjo6CiAKICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTE1MDg3PiBXZWIgSW5zcGVjdG9yOiBTaG91bGQgbm90IGV2YWx1YXRlIEphdmFTY3JpcHQg
aGFuZGxpbmcgZXhjZXB0aW9ucwogICAgIC8vIElmIHRoaXMgaXMgYSBjdXN0b20gZXhjZXB0aW9u
IG9iamVjdCwgY2FsbCB0b1N0cmluZyBvbiBpdCB0byB0cnkgYW5kIGdldCBhIG5pY2Ugc3RyaW5n
IHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZXhjZXB0aW9uLgotICAgIFN0cmluZyBlcnJvck1lc3Nh
Z2UgPSBleGNlcHRpb24udG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIFN0cmluZyBl
cnJvck1lc3NhZ2UgPSBleGNlcHRpb24tPnZhbHVlKCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICBpZiAoSlNHbG9iYWxPYmpl
Y3RDb25zb2xlQ2xpZW50Ojpsb2dUb1N5c3RlbUNvbnNvbGUoKSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFs
T2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5oCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIGNsYXNzIFN0b3B3YXRjaDsKIAog
bmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDb25zb2xlQ2xpZW50OworY2xhc3MgRXhjZXB0aW9uOwog
Y2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU1ZhbHVlOwpA
QCAtODEsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJbmNsdWRlc05hdGl2ZUNhbGxT
dGFja1doZW5SZXBvcnRpbmdFeGNlcHRpb25zKGJvb2wgaW5jbHVkZXNOYXRpdmVDYWxsU3RhY2sp
IHsgbV9pbmNsdWRlTmF0aXZlQ2FsbFN0YWNrV2l0aEV4Y2VwdGlvbnMgPSBpbmNsdWRlc05hdGl2
ZUNhbGxTdGFjazsgfQogCiAgICAgdm9pZCBwYXVzZSgpOwotICAgIHZvaWQgcmVwb3J0QVBJRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbik7CisgICAgdm9p
ZCByZXBvcnRBUElFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiopOwog
CiAgICAgSlNDOjpDb25zb2xlQ2xpZW50KiBjb25zb2xlQ2xpZW50KCkgY29uc3Q7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1
Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAxODUxODEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdT
ZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgogICAgIC8v
IE5PVEU6IEN1cnJlbnRseSBhbGwgZXhjZXB0aW9ucyBhcmUgcmVwb3J0ZWQgYXQgdGhlIEFQSSBi
b3VuZGFyeSB0aHJvdWdoIHJlcG9ydEFQSUV4Y2VwdGlvbi4KICAgICAvLyBVbnRpbCBhIHRpbWUg
Y29tZXMgd2hlcmUgYW4gZXhjZXB0aW9uIGNhbiBiZSBjYXVzZWQgb3V0c2lkZSBvZiB0aGUgQVBJ
IChlLmcuIHNldFRpbWVvdXQKICAgICAvLyBvciBzb21lIG90aGVyIGFzeW5jIG9wZXJhdGlvbiBp
biBhIHB1cmUgSlNDb250ZXh0KSB3ZSBjYW4gaWdub3JlIGV4Y2VwdGlvbnMgcmVwb3J0ZWQgaGVy
ZS4KLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qKSBjb25zdCBvdmVycmlkZSB7
IH0KIAogICAgIExpc3RlbmVyU2V0IG1fbGlzdGVuZXJzOwogICAgIEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIG1fZ2xvYmFsT2JqZWN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMTg1
MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxs
RnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJE
ZWJ1Z2dlclNjb3BlLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24u
aCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oIgpAQCAtNzUsNyArNzYs
NyBAQCBKU0phdmFTY3JpcHRDYWxsRnJhbWU6On5KU0phdmFTY3JpcHRDYWxsCiAKIEpTVmFsdWUg
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
SlNWYWx1ZSBleGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBpbXBsKCkuZXZhbHVhdGUoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpLCBleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAg
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFt
ZS5oCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0phdmFTY3JpcHRDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBw
dWJsaWM6CiAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogdm1FbnRyeUdsb2JhbE9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3QoKTsg
fQogCiAgICAgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdn
ZXJDYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOyB9Ci0gICAgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlKGNv
bnN0IFN0cmluZyYgc2NyaXB0LCBKU0M6OkpTVmFsdWUmIGV4Y2VwdGlvbikgY29uc3QgIHsgcmV0
dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKHNjcmlwdCwgZXhjZXB0aW9uKTsgfQor
ICAgIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNDOjpFeGNl
cHRpb24qJiBleGNlcHRpb24pIGNvbnN0ICB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLT5l
dmFsdWF0ZShzY3JpcHQsIGV4Y2VwdGlvbik7IH0KIAogcHJpdmF0ZToKICAgICBKYXZhU2NyaXB0
Q2FsbEZyYW1lKFBhc3NSZWZQdHI8SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZT4pOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxT
dGFja0ZhY3RvcnkuY3BwCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgogCiAj
aW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJTY3JpcHRB
cmd1bWVudHMuaCIKQEAgLTEyOCwxMCArMTI5LDEwIEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RTb3Vy
Y2VJbmZvcm1hdGlvbkZyb20KICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogfQogCi1QYXNz
UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlJiBleGNlcHRpb24sIHNpemVfdCBt
YXhTdGFja1NpemUpCitQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2Fs
bFN0YWNrRnJvbUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNlcHRpb24q
IGV4Y2VwdGlvbiwgc2l6ZV90IG1heFN0YWNrU2l6ZSkKIHsKICAgICBWZWN0b3I8U2NyaXB0Q2Fs
bEZyYW1lPiBmcmFtZXM7Ci0gICAgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+IHN0YWNrVHJh
Y2UgPSBleGVjLT52bSgpLmV4Y2VwdGlvblN0YWNrKCk7CisgICAgUmVmQ291bnRlZEFycmF5PFN0
YWNrRnJhbWU+IHN0YWNrVHJhY2UgPSBleGNlcHRpb24tPnN0YWNrKCk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdGFja1RyYWNlLnNpemUoKSAmJiBpIDwgbWF4U3RhY2tTaXplOyBpKysp
IHsKICAgICAgICAgdW5zaWduZWQgbGluZTsKICAgICAgICAgdW5zaWduZWQgY29sdW1uOwpAQCAt
MTQxLDggKzE0Miw4IEBAIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHQK
ICAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0byBnZXR0aW5nIGF0IGxlYXN0IHRoZSBsaW5lIGFu
ZCBzb3VyY2VVUkwgZnJvbSB0aGUgZXhjZXB0aW9uIG9iamVjdCBpZiBpdCBoYXMgdmFsdWVzIGFu
ZCB0aGUgZXhjZXB0aW9uU3RhY2sgZG9lc24ndC4KLSAgICBKU09iamVjdCogZXhjZXB0aW9uT2Jq
ZWN0ID0gZXhjZXB0aW9uLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGNlcHRpb24uaXNPYmpl
Y3QoKSkgeworICAgIGlmIChleGNlcHRpb24tPnZhbHVlKCkuaXNPYmplY3QoKSkgeworICAgICAg
ICBKU09iamVjdCogZXhjZXB0aW9uT2JqZWN0ID0gZXhjZXB0aW9uLT52YWx1ZSgpLnRvT2JqZWN0
KGV4ZWMpOwogICAgICAgICBpbnQgbGluZU51bWJlcjsKICAgICAgICAgaW50IGNvbHVtbk51bWJl
cjsKICAgICAgICAgU3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9y
eS5oCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBKU0MgeworY2xhc3MgRXhj
ZXB0aW9uOwogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSlNWYWx1ZTsKIH0KQEAgLTQ3LDcgKzQ4
LDcgQEAgY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwogLy8gRklYTUU6IFRoZSBzdWJ0bGUgZGlmZmVy
ZW5jZXMgYmV0d2VlbiB0aGVzZSBzaG91bGQgYmUgZWxpbWluYXRlZC4KIEpTX0VYUE9SVF9QUklW
QVRFIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2soSlND
OjpFeGVjU3RhdGUqLCBzaXplX3QgbWF4U3RhY2tTaXplKTsKIEpTX0VYUE9SVF9QUklWQVRFIFBh
c3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGb3JDb25zb2xl
KEpTQzo6RXhlY1N0YXRlKiwgc2l6ZV90IG1heFN0YWNrU2l6ZSk7Ci1KU19FWFBPUlRfUFJJVkFU
RSBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSYgZXhjZXB0aW9uLCBzaXplX3Qg
bWF4U3RhY2tTaXplKTsKK0pTX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0
YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFeGNlcHRpb24qLCBzaXplX3QgbWF4U3RhY2tTaXplKTsKIEpTX0VYUE9SVF9QUklWQVRF
IFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBjcmVhdGVTY3JpcHRBcmd1bWVudHMoSlNDOjpF
eGVjU3RhdGUqLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCk7CiAKIH0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJEZWJ1Z2dlckNhbGxGcmFtZS5oIgog
I2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNs
dWRlICJKU0phdmFTY3JpcHRDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNs
dWRlICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCkBAIC05Myw3ICs5NCw3IEBAIGJvb2wgU2NyaXB0
RGVidWdTZXJ2ZXI6OmV2YWx1YXRlQnJlYWtwb2kKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgU2NyaXB0QnJlYWtwb2ludEFjdGlvblR5cGVFdmFsdWF0ZTogewotICAgICAgICBKU1Zh
bHVlIGV4Y2VwdGlvbjsKKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgICAgIGRl
YnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0ZShicmVha3BvaW50QWN0aW9uLmRhdGEsIGV4Y2VwdGlv
bik7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICByZXBvcnRFeGNlcHRpb24o
ZGVidWdnZXJDYWxsRnJhbWUtPmV4ZWMoKSwgZXhjZXB0aW9uKTsKQEAgLTEwMywxMyArMTA0LDEz
IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OmV2YWx1YXRlQnJlYWtwb2kKICAgICAgICAgZGlz
cGF0Y2hCcmVha3BvaW50QWN0aW9uU291bmQoZGVidWdnZXJDYWxsRnJhbWUtPmV4ZWMoKSwgYnJl
YWtwb2ludEFjdGlvbi5pZGVudGlmaWVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTY3Jp
cHRCcmVha3BvaW50QWN0aW9uVHlwZVByb2JlOiB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9u
OworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQg
PSBkZWJ1Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoYnJlYWtwb2ludEFjdGlvbi5kYXRhLCBleGNl
cHRpb24pOwogICAgICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICAgICAgcmVwb3J0RXhjZXB0
aW9uKGRlYnVnZ2VyQ2FsbEZyYW1lLT5leGVjKCksIGV4Y2VwdGlvbik7CiAgICAgICAgIAogICAg
ICAgICBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUgPSBkZWJ1Z2dlckNhbGxGcmFtZS0+c2NvcGUoKS0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUgd3JhcHBlZFJlc3VsdCA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKHN0YXRlLT52bSgp
LCBleGNlcHRpb24gPyBleGNlcHRpb24gOiByZXN1bHQpOworICAgICAgICBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSB3cmFwcGVkUmVzdWx0ID0gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoc3RhdGUt
PnZtKCksIGV4Y2VwdGlvbiA/IGV4Y2VwdGlvbi0+dmFsdWUoKSA6IHJlc3VsdCk7CiAgICAgICAg
IGRpc3BhdGNoQnJlYWtwb2ludEFjdGlvblByb2JlKHN0YXRlLCBicmVha3BvaW50QWN0aW9uLCB3
cmFwcGVkUmVzdWx0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzAyLDcgKzMwMyw3IEBA
IHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZUJyZWFrcG9pbnQKICAgICB9CiB9CiAKLXZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlv
bihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbikgY29uc3QKK3Zv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlv
bihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbikgY29uc3QK
IHsKICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmgJ
KHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2Ny
aXB0RGVidWdTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbnRpbnVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHJ1bkV2ZW50TG9vcFdoaWxlUGF1c2VkKCkgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRTY3JpcHQoSlNDOjpFeGVjU3RhdGUqKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiopIGNvbnN0ID0gMDsKIAogICAgIGJvb2wgZXZh
bHVhdGVCcmVha3BvaW50QWN0aW9uKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mKTsKIApA
QCAtMTAxLDcgKzEwMSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNvdXJjZVBhcnNl
ZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6U291cmNlUHJvdmlkZXIqLCBpbnQgZXJyb3JMaW5lLCBj
b25zdCBTdHJpbmcmIGVycm9yTXNnKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIGJvb2wg
bmVlZFBhdXNlSGFuZGxpbmcoSlNDOjpKU0dsb2JhbE9iamVjdCopIG92ZXJyaWRlIGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQnJlYWtwb2ludEhpdChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSlNDOjpCcmVha3BvaW50Jikgb3ZlcnJpZGUgZmluYWw7
Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24pIGNvbnN0IG92ZXJyaWRlIGZp
bmFsOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRp
b24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiopIGNvbnN0IG92ZXJyaWRlIGZpbmFs
OwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQYXVzZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpEZWJ1Z2dlcjo6UmVhc29uRm9yUGF1c2UpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCkgb3ZlcnJpZGUgZmluYWw7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmgJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDExIEBACiAjZGVmaW5l
IENhbGxGcmFtZV9oCiAKICNpbmNsdWRlICJBYnN0cmFjdFBDLmgiCi0jaW5jbHVkZSAiVk0uaCIK
ICNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgi
CiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIKKyNpbmNs
dWRlICJWTS5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKIAogbmFtZXNwYWNlIEpTQyAg
ewpAQCAtNzUsMTMgKzc1LDkgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyBCdXQgdGhl
eSdyZSB1c2VkIGluIG1hbnkgcGxhY2VzIGluIGxlZ2FjeSBjb2RlLCBzbyB0aGV5J3JlIG5vdCBn
b2luZyBhd2F5IGFueSB0aW1lIHNvb24uCiAKICAgICAgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigp
IHsgdm0oKS5jbGVhckV4Y2VwdGlvbigpOyB9Ci0gICAgICAgIHZvaWQgY2xlYXJTdXBwbGVtZW50
YXJ5RXhjZXB0aW9uSW5mbygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZtKCkuY2xlYXJFeGNl
cHRpb25TdGFjaygpOwotICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24oKSBj
b25zdCB7IHJldHVybiB2bSgpLmV4Y2VwdGlvbigpOyB9Ci0gICAgICAgIGJvb2wgaGFkRXhjZXB0
aW9uKCkgY29uc3QgeyByZXR1cm4gIXZtKCkuZXhjZXB0aW9uKCkuaXNFbXB0eSgpOyB9CisgICAg
ICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gdm0oKS5leGNlcHRpb24o
KTsgfQorICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuICEhdm0oKS5l
eGNlcHRpb24oKTsgfQogCiAgICAgICAgIEF0b21pY1N0cmluZ1RhYmxlKiBhdG9taWNTdHJpbmdU
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHZtKCkuYXRvbWljU3RyaW5nVGFibGUoKTsgfQogICAgICAg
ICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJu
ICp2bSgpLnByb3BlcnR5TmFtZXM7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkRlYnVnZ2VyQ2FsbEZyYW1lLmgiCiAj
aW5jbHVkZSAiRXJyb3JJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkV2YWxDb2RlQ2FjaGUuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5j
bHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgpAQCAtNDM1LDcgKzQz
Niw3IEBAIHN0YXRpYyBib29sIHVud2luZENhbGxGcmFtZShTdGFja1Zpc2l0b3IKIHsKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZpc2l0b3ItPmNhbGxGcmFtZSgpOwogICAgIGlmIChEZWJ1
Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+ZGVidWdn
ZXIoKSkgewotICAgICAgICBDbGVhckV4Y2VwdGlvblNjb3BlIHNjb3BlKCZjYWxsRnJhbWUtPnZt
KCkpOworICAgICAgICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgc2NvcGUoJmNhbGxGcmFtZS0+dm0o
KSk7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmNh
bGxlZSgpKSkKICAgICAgICAgICAgIGRlYnVnZ2VyLT5yZXR1cm5FdmVudChjYWxsRnJhbWUpOwog
ICAgICAgICBlbHNlCkBAIC01ODMsOSArNTg0LDkgQEAgSlNTdHJpbmcqIEludGVycHJldGVyOjpz
dGFja1RyYWNlQXNTdHJpbgogICAgIHJldHVybiBqc1N0cmluZygmZXhlYy0+dm0oKSwgYnVpbGRl
ci50b1N0cmluZygpKTsKIH0KIAotY2xhc3MgR2V0RXhjZXB0aW9uSGFuZGxlckZ1bmN0b3Igewor
Y2xhc3MgR2V0Q2F0Y2hIYW5kbGVyRnVuY3RvciB7CiBwdWJsaWM6Ci0gICAgR2V0RXhjZXB0aW9u
SGFuZGxlckZ1bmN0b3IoKQorICAgIEdldENhdGNoSGFuZGxlckZ1bmN0b3IoKQogICAgICAgICA6
IG1faGFuZGxlcigwKQogICAgIHsKICAgICB9CkBAIC01OTksNyArNjAwLDggQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAKICAgICAgICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQgPSB2aXNpdG9yLT5ieXRlY29kZU9mZnNldCgpOwotICAgICAg
ICBtX2hhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCk7CisgICAgICAgIGNvbnN0IGJvb2wgUmVxdWlyZUNhdGNoSGFuZGxlciA9IHRydWU7
CisgICAgICAgIG1faGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0
KGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlQ2F0Y2hIYW5kbGVyKTsKICAgICAgICAgaWYgKG1faGFu
ZGxlcikKICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAKQEAgLTY0OSwx
MSArNjUxLDEyIEBAIHByaXZhdGU6CiAgICAgSGFuZGxlckluZm8qJiBtX2hhbmRsZXI7CiB9Owog
Ci1ORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk1FbnRyeUZy
YW1lKiYgdm1FbnRyeUZyYW1lLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEpTVmFsdWUmIGV4Y2Vw
dGlvblZhbHVlKQorTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5k
KFZNRW50cnlGcmFtZSomIHZtRW50cnlGcmFtZSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGNl
cHRpb24qIGV4Y2VwdGlvbikKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCk7CiAgICAgYm9vbCBpc1Rlcm1pbmF0aW9uID0gZmFsc2U7CiAKKyAgICBK
U1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhjZXB0aW9uLT52YWx1ZSgpOwogICAgIEFTU0VSVCgh
ZXhjZXB0aW9uVmFsdWUuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIWV4Y2VwdGlvblZhbHVlLmlz
Q2VsbCgpIHx8IGV4Y2VwdGlvblZhbHVlLmFzQ2VsbCgpKTsKICAgICAvLyBUaGlzIHNob3VsZG4n
dCBiZSBwb3NzaWJsZSAoaGVuY2UgdGhlIGFzc2VydGlvbnMpLCBidXQgd2UncmUgYWxyZWFkeSBp
biB0aGUgc2xvd2VzdCBvZgpAQCAtNjYyLDMyICs2NjUsMzUgQEAgTkVWRVJfSU5MSU5FIEhhbmRs
ZXJJbmZvKiBJbnRlcnByZXRlcjo6dQogICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGpzTnVsbCgp
OwogCiAgICAgaWYgKGV4Y2VwdGlvblZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIGlzVGVybWlu
YXRpb24gPSBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oYXNPYmplY3QoZXhjZXB0aW9u
VmFsdWUpKTsKKyAgICAgICAgaXNUZXJtaW5hdGlvbiA9IGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4
Y2VwdGlvbihleGNlcHRpb24pOwogCi0gICAgQVNTRVJUKGNhbGxGcmFtZS0+dm0oKS5leGNlcHRp
b25TdGFjaygpLnNpemUoKSk7CisgICAgQVNTRVJUKGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24o
KSAmJiBjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKCktPnN0YWNrKCkuc2l6ZSgpKTsKIAogICAg
IERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5k
ZWJ1Z2dlcigpOwotICAgIGlmIChkZWJ1Z2dlciAmJiBkZWJ1Z2dlci0+bmVlZHNFeGNlcHRpb25D
YWxsYmFja3MoKSkgewotICAgICAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIHRoZSBleGNlcHRpb24g
YW5kIHRoZSBleGNlcHRpb24gc3RhY2sgaGVyZSBpbiBvcmRlciB0byBzZWUgaWYgYSBuZXcgZXhj
ZXB0aW9uIGhhcHBlbnMuCisgICAgaWYgKGRlYnVnZ2VyICYmIGRlYnVnZ2VyLT5uZWVkc0V4Y2Vw
dGlvbkNhbGxiYWNrcygpICYmICFleGNlcHRpb24tPmRpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3co
KSkgeworICAgICAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIHRoZSBleGNlcHRpb24gaGVyZSBpbiBv
cmRlciB0byBzZWUgaWYgYSBuZXcgZXhjZXB0aW9uIGhhcHBlbnMuCiAgICAgICAgIC8vIEFmdGVy
d2FyZHMsIHRoZSB2YWx1ZXMgYXJlIHB1dCBiYWNrIHRvIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhp
cyBlcnJvci4KLSAgICAgICAgQ2xlYXJFeGNlcHRpb25TY29wZSBzY29wZSgmY2FsbEZyYW1lLT52
bSgpKTsKKyAgICAgICAgU3VzcGVuZEV4Y2VwdGlvblNjb3BlIHNjb3BlKCZjYWxsRnJhbWUtPnZt
KCkpOwogICAgICAgICAvLyBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IGlmIHRoZSBkZWJ1Z2dlciBp
cyBlbmFibGVkIHRoZW4gdGhlcmUgaXMgbm8gaW5saW5pbmcuCiAgICAgICAgIC8vIElmIHRoYXQg
YXNzdW1wdGlvbiB0dXJucyBvdXQgdG8gYmUgZmFsc2UgdGhlbiB3ZSdsbCBpZ25vcmUgdGhlIGlu
bGluZWQgY2FsbAogICAgICAgICAvLyBmcmFtZXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3NTQKIAotICAgICAgICBib29sIGhhc0hhbmRs
ZXI7CisgICAgICAgIGJvb2wgaGFzQ2F0Y2hIYW5kbGVyOwogICAgICAgICBpZiAoaXNUZXJtaW5h
dGlvbikKLSAgICAgICAgICAgIGhhc0hhbmRsZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGhhc0Nh
dGNoSGFuZGxlciA9IGZhbHNlOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEdldEV4Y2Vw
dGlvbkhhbmRsZXJGdW5jdG9yIGZ1bmN0b3I7CisgICAgICAgICAgICBHZXRDYXRjaEhhbmRsZXJG
dW5jdG9yIGZ1bmN0b3I7CiAgICAgICAgICAgICBjYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7
Ci0gICAgICAgICAgICBoYXNIYW5kbGVyID0gISFmdW5jdG9yLmhhbmRsZXIoKTsKKyAgICAgICAg
ICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gZnVuY3Rvci5oYW5kbGVyKCk7CisgICAgICAgICAg
ICBBU1NFUlQoIWhhbmRsZXIgfHwgaGFuZGxlci0+aXNDYXRjaEhhbmRsZXIoKSk7CisgICAgICAg
ICAgICBoYXNDYXRjaEhhbmRsZXIgPSAhIWhhbmRsZXI7CiAgICAgICAgIH0KIAotICAgICAgICBk
ZWJ1Z2dlci0+ZXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGhhc0hhbmRsZXIp
OworICAgICAgICBkZWJ1Z2dlci0+ZXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUs
IGhhc0NhdGNoSGFuZGxlcik7CiAgICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRp
b24oKSk7CiAgICAgfQorICAgIGV4Y2VwdGlvbi0+c2V0RGlkTm90aWZ5SW5zcGVjdG9yT2ZUaHJv
dygpOwogCiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHZQQywgdW53aW5k
aW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4KICAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9
IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuaAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDIwICs5OCwyMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBleHByZXNzaW9uSW5mbyhpbnQmIGRpdm90LCBp
bnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVk
JiBjb2x1bW4pOwogICAgIH07CiAKLSAgICBjbGFzcyBDbGVhckV4Y2VwdGlvblNjb3BlIHsKKyAg
ICBjbGFzcyBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgQ2xl
YXJFeGNlcHRpb25TY29wZShWTSogdm0pOiBtX3ZtKHZtKQorICAgICAgICBTdXNwZW5kRXhjZXB0
aW9uU2NvcGUoVk0qIHZtKQorICAgICAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICB7Ci0gICAg
ICAgICAgICB2bS0+Z2V0RXhjZXB0aW9uSW5mbyhvbGRFeGNlcHRpb24sIG9sZEV4Y2VwdGlvblN0
YWNrKTsKKyAgICAgICAgICAgIG9sZEV4Y2VwdGlvbiA9IHZtLT5leGNlcHRpb24oKTsKICAgICAg
ICAgICAgIHZtLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICB9Ci0gICAgICAgIH5DbGVhckV4
Y2VwdGlvblNjb3BlKCkKKyAgICAgICAgflN1c3BlbmRFeGNlcHRpb25TY29wZSgpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIG1fdm0tPnNldEV4Y2VwdGlvbkluZm8ob2xkRXhjZXB0aW9uLCBvbGRF
eGNlcHRpb25TdGFjayk7CisgICAgICAgICAgICBtX3ZtLT5zZXRFeGNlcHRpb24ob2xkRXhjZXB0
aW9uKTsKICAgICAgICAgfQogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTQzo6SlNWYWx1ZSBvbGRF
eGNlcHRpb247Ci0gICAgICAgIFJlZkNvdW50ZWRBcnJheTxKU0M6OlN0YWNrRnJhbWU+IG9sZEV4
Y2VwdGlvblN0YWNrOworICAgICAgICBFeGNlcHRpb24qIG9sZEV4Y2VwdGlvbjsKICAgICAgICAg
Vk0qIG1fdm07CiAgICAgfTsKICAgICAKQEAgLTIxNSw3ICsyMTUsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgCiAgICAgICAgIFNhbXBsaW5nVG9vbCogc2FtcGxlcigpIHsgcmV0dXJuIG1f
c2FtcGxlci5nZXQoKTsgfQogCi0gICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdW53
aW5kKFZNRW50cnlGcmFtZSomLCBDYWxsRnJhbWUqJiwgSlNWYWx1ZSYpOworICAgICAgICBORVZF
Ul9JTkxJTkUgSGFuZGxlckluZm8qIHVud2luZChWTUVudHJ5RnJhbWUqJiwgQ2FsbEZyYW1lKiYs
IEV4Y2VwdGlvbiopOwogICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBkZWJ1ZyhDYWxsRnJhbWUq
LCBEZWJ1Z0hvb2tJRCk7CiAgICAgICAgIEpTU3RyaW5nKiBzdGFja1RyYWNlQXNTdHJpbmcoRXhl
Y1N0YXRlKiwgVmVjdG9yPFN0YWNrRnJhbWU+KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjMsNyArMjIzLDcgQEAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVy
czo6ZQogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgcmVzdWx0ID0gYnJhbmNoVGVzdDY0KGtpbmQg
PT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb25aZXJvIDogWmVybywgQWJzb2x1dGVBZGRyZXNz
KHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgIHJlc3VsdCA9IGJyYW5jaDMyKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RF
cXVhbCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0o
KS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgIHJl
c3VsdCA9IGJyYW5jaDMyKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6
IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpLCBUcnVz
dGVkSW1tMzIoMCkpOwogI2VuZGlmCiAgICAgCiAgICAgaWYgKHdpZHRoID09IE5vcm1hbEp1bXBX
aWR0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNw
cAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNl
cHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTYgKzQwLDE3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi12b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFt
ZSwgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSkKK3ZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4
ZWNTdGF0ZSogY2FsbEZyYW1lKQogewogICAgIGlmIChPcHRpb25zOjpicmVha09uVGhyb3coKSkg
ewogICAgICAgICBkYXRhTG9nKCJJbiBjYWxsIGZyYW1lICIsIFJhd1BvaW50ZXIoY2FsbEZyYW1l
KSwgIiBmb3IgY29kZSBibG9jayAiLCAqY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgIlxuIik7CiAg
ICAgICAgIENSQVNIKCk7CiAgICAgfQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2VwdGlv
blZhbHVlKTsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHZtLT5leGNlcHRpb24oKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb24pOwogICAgIFZNRW50cnlGcmFtZSogdm1FbnRyeUZy
YW1lID0gdm0tPnRvcFZNRW50cnlGcmFtZTsKLSAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IHZt
LT5pbnRlcnByZXRlci0+dW53aW5kKHZtRW50cnlGcmFtZSwgY2FsbEZyYW1lLCBleGNlcHRpb25W
YWx1ZSk7IC8vIFRoaXMgbWF5IHVwZGF0ZSB2bUVudHJ5RnJhbWUgYW5kIGNhbGxGcmFtZS4KKyAg
ICBIYW5kbGVySW5mbyogaGFuZGxlciA9IHZtLT5pbnRlcnByZXRlci0+dW53aW5kKHZtRW50cnlG
cmFtZSwgY2FsbEZyYW1lLCBleGNlcHRpb24pOyAvLyBUaGlzIG1heSB1cGRhdGUgdm1FbnRyeUZy
YW1lIGFuZCBjYWxsRnJhbWUuCiAKICAgICB2b2lkKiBjYXRjaFJvdXRpbmU7CiAgICAgSW5zdHJ1
Y3Rpb24qIGNhdGNoUENGb3JJbnRlcnByZXRlciA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBWTTsKIAot
dm9pZCBnZW5lcmljVW53aW5kKFZNKiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSBleGNlcHRpb25WYWx1
ZSk7Cit2b2lkIGdlbmVyaWNVbndpbmQoVk0qLCBFeGVjU3RhdGUqKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogCiAj
aW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJh
eS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpAQCAtOTcsNyArOTgsNyBAQCBKSVQ6OkNvZGVSZWYg
SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2CiAjZW5kaWYgLy8gQ1BVKFg4NikKIAogICAgIC8v
IENoZWNrIGZvciBhbiBleGNlcHRpb24KLSAgICBKdW1wIHNhd0V4Y2VwdGlvbiA9IGJyYW5jaDMy
KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmFk
ZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsgCisgICAgSnVtcCBz
YXdFeGNlcHRpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHZtLT5hZGRy
ZXNzT2ZFeGNlcHRpb24oKSksIFRydXN0ZWRJbW0zMigwKSk7CiAKICAgICBlbWl0RnVuY3Rpb25F
cGlsb2d1ZSgpOwogICAgIC8vIFJldHVybi4KQEAgLTgyOSwxMyArODMwLDE5IEBAIHZvaWQgSklU
OjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXIKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIC8vIE5vdyBz
dG9yZSB0aGUgZXhjZXB0aW9uIHJldHVybmVkIGJ5IG9wZXJhdGlvblRocm93LgotICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0gICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWUo
KS5wYXlsb2FkKCkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlKCkudGFnKCkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9u
T2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpLCByZWdUMik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKKworICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0
KCkpKTsKIAogICAgIHVuc2lnbmVkIGV4Y2VwdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgZW1pdFN0b3JlKGV4Y2VwdGlvbiwgcmVnVDEsIHJlZ1QwKTsKKyAgICBl
bWl0U3RvcmUoZXhjZXB0aW9uLCByZWdUMSwgcmVnVDIpOworCisgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDIsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwg
RXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpLCByZWdUMSk7CisKKyAgICB1bnNpZ25lZCB0aHJvd25WYWx1ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgZW1pdFN0b3JlKHRocm93blZhbHVlLCByZWdU
MSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMu
aCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5o
IgpAQCAtNTI5LDYgKzUzMCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9u
KiBjdXIKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSwg
cmVnVDApOwogICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpKSwgQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKworICAg
IGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQ2LDcgKzE4NDYsNyBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3coRXhlY1N0CiAgICAgdm0tPnRocm93
RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKIAogICAgIC8vIFJlc3VsdHMgc3RvcmVk
IG91dC1vZi1iYW5kIGluIHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93LCB2bS5jYWxsRnJhbWVG
b3JUaHJvdyAmIHZtLnZtRW50cnlGcmFtZUZvclRocm93Ci0gICAgZ2VuZXJpY1Vud2luZCh2bSwg
ZXhlYywgZXhjZXB0aW9uVmFsdWUpOworICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwogfQog
CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCkBAIC0xODg1LDExICsxODg1LDcgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluaXRHbG9iYWxDbwogdm9pZCBKSVRfT1BFUkFUSU9OIGxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXIoVk0qIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICBKU1ZhbHVlIGV4Y2Vw
dGlvblZhbHVlID0gdm0tPmV4Y2VwdGlvbigpOwotICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7
Ci0gICAgCi0gICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0aW9uVmFsdWUpOworICAg
IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwogICAgIEFTU0VSVCh2bS0+dGFyZ2V0TWFjaGluZVBD
Rm9yVGhyb3cpOwogfQogCkBAIC0xOTAwLDExICsxODk2LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IGxvb2t1cEV4Y2VwdGlvbkhhbmRsZQogICAgIEFTU0VSVChjYWxsZXJGcmFtZSk7CiAKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXJXaXRoUmVzdG9yZSB0cmFjZXIodm0sIHZtRW50cnlGcmFtZSwg
Y2FsbGVyRnJhbWUpOwotCi0gICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IHZtLT5leGNlcHRp
b24oKTsKLSAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwotICAgIAotICAgIGdlbmVyaWNVbndp
bmQodm0sIGNhbGxlckZyYW1lLCBleGNlcHRpb25WYWx1ZSk7CisgICAgZ2VuZXJpY1Vud2luZCh2
bSwgY2FsbGVyRnJhbWUpOwogICAgIEFTU0VSVCh2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cp
OwogfQogCkBAIC0xOTEyLDggKzE5MDQsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Vk1IYW5kbGVFeGNlCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICBnZW5lcmljVW53aW5kKHZtLCBl
eGVjLCB2bS0+ZXhjZXB0aW9uKCkpOworICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwogfQog
CiAvLyBUaGlzIGZ1bmN0aW9uICJzaG91bGQiIGp1c3QgdGFrZSB0aGUgRXhlY1N0YXRlKiwgYnV0
IGRvaW5nIHNvIHdvdWxkIG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE4NTE4MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQ5LDggKzM0OSw4IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bmF0aXZlRm9yR2UKICNlbHNlCiAgICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgZXhjZXB0aW9uSGFu
ZGxlciA9IGppdC5icmFuY2gzMigKICAgICAgICAgSlNJbnRlcmZhY2VKSVQ6Ok5vdEVxdWFsLAot
ICAgICAgICBKU0ludGVyZmFjZUpJVDo6QWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHZtLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLAotICAgICAgICBKU0ludGVyZmFjZUpJVDo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICAgICAgSlNJbnRlcmZh
Y2VKSVQ6OkFic29sdXRlQWRkcmVzcyh2bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpLAorICAgICAg
ICBKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDApKTsKICNlbmRpZgogCiAgICAgaml0LmVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAkocmV2aXNpb24gMTg1MTgxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDb21tb25TbG93UGF0
aHMuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNs
dWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTg1MTgx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTM3NSw4ICsxMzc1LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3Byb2ZpbGVfZAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2hhbmRsZV9l
eGNlcHRpb24pCiB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7Ci0gICAgQVNTRVJUKHZt
LmV4Y2VwdGlvbigpKTsKLSAgICBnZW5lcmljVW53aW5kKCZ2bSwgZXhlYywgdm0uZXhjZXB0aW9u
KCkpOworICAgIGdlbmVyaWNVbndpbmQoJnZtLCBleGVjKTsKICAgICBMTElOVF9FTkRfSU1QTCgp
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTY5Myw3ICs2OTMsNyBAQCBtYWNybyBicmFuY2hJZkV4Y2VwdGlvbihsYWJl
bCkKICAgICBsb2FkcCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQzCiAgICAgYW5kcCBN
YXJrZWRCbG9ja01hc2ssIHQzCiAgICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fd2Vha1NldCArIFdl
YWtTZXQ6Om1fdm1bdDNdLCB0MwotICAgIGJpZXEgVk06Om1fZXhjZXB0aW9uICsgVGFnT2Zmc2V0
W3QzXSwgRW1wdHlWYWx1ZVRhZywgLm5vRXhjZXB0aW9uCisgICAgYnRpeiBWTTo6bV9leGNlcHRp
b25bdDNdLCAubm9FeGNlcHRpb24KICAgICBqbXAgbGFiZWwKIC5ub0V4Y2VwdGlvbjoKIGVuZApA
QCAtMTk1MiwxNSArMTk1MiwyMCBAQCBfbGxpbnRfb3BfY2F0Y2g6CiAgICAgcmVzdG9yZVN0YWNr
UG9pbnRlckFmdGVyQ2FsbCgpCiAKICAgICBsb2FkaSBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0Zv
clRocm93W3QzXSwgUEMKLSAgICBsb2FkaSBWTTo6bV9leGNlcHRpb24gKyBQYXlsb2FkT2Zmc2V0
W3QzXSwgdDAKLSAgICBsb2FkaSBWTTo6bV9leGNlcHRpb24gKyBUYWdPZmZzZXRbdDNdLCB0MQot
ICAgIHN0b3JlaSAwLCBWTTo6bV9leGNlcHRpb24gKyBQYXlsb2FkT2Zmc2V0W3QzXQotICAgIHN0
b3JlaSBFbXB0eVZhbHVlVGFnLCBWTTo6bV9leGNlcHRpb24gKyBUYWdPZmZzZXRbdDNdCisgICAg
bG9hZGkgVk06Om1fZXhjZXB0aW9uW3QzXSwgdDAKKyAgICBzdG9yZWkgMCwgVk06Om1fZXhjZXB0
aW9uW3QzXQogICAgIGxvYWRpIDRbUENdLCB0MgogICAgIHN0b3JlaSB0MCwgUGF5bG9hZE9mZnNl
dFtjZnIsIHQyLCA4XQorICAgIHN0b3JlaSBDZWxsVGFnLCBUYWdPZmZzZXRbY2ZyLCB0MiwgOF0K
KworICAgIGxvYWRpIEV4Y2VwdGlvbjo6bV92YWx1ZSArIFRhZ09mZnNldFt0MF0sIHQxCisgICAg
bG9hZGkgRXhjZXB0aW9uOjptX3ZhbHVlICsgUGF5bG9hZE9mZnNldFt0MF0sIHQwCisgICAgbG9h
ZGkgOFtQQ10sIHQyCisgICAgc3RvcmVpIHQwLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDIsIDhdCiAg
ICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRbY2ZyLCB0MiwgOF0KKwogICAgIHRyYWNlRXhlY3V0aW9u
KCkgICMgVGhpcyBuZWVkcyB0byBiZSBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBjbG9i
YmVyIHQwLCB0MSwgdDIsIHQzIGFib3ZlLgotICAgIGRpc3BhdGNoKDIpCisgICAgZGlzcGF0Y2go
MykKIAogX2xsaW50X29wX2VuZDoKICAgICB0cmFjZUV4ZWN1dGlvbigpCkBAIC0yMDM4LDcgKzIw
NDMsNyBAQCBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2ZmCiAgICAgZW5k
CiAgICAgCiAgICAgZnVuY3Rpb25FcGlsb2d1ZSgpCi0gICAgYmluZXEgVk06Om1fZXhjZXB0aW9u
ICsgVGFnT2Zmc2V0W3QzXSwgRW1wdHlWYWx1ZVRhZywgLmhhbmRsZUV4Y2VwdGlvbgorICAgIGJ0
aW56IFZNOjptX2V4Y2VwdGlvblt0M10sIC5oYW5kbGVFeGNlcHRpb24KICAgICByZXQKIAogLmhh
bmRsZUV4Y2VwdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTgyMCwxMiArMTgyMCwxOCBAQCBfbGxpbnRfb3BfY2F0Y2g6CiAgICAgbG9h
ZHAgVk06OnRhcmdldEludGVycHJldGVyUENGb3JUaHJvd1t0M10sIFBDCiAgICAgc3VicCBQQiwg
UEMKICAgICByc2hpZnRwIDMsIFBDCisKICAgICBsb2FkcSBWTTo6bV9leGNlcHRpb25bdDNdLCB0
MAogICAgIHN0b3JlcSAwLCBWTTo6bV9leGNlcHRpb25bdDNdCiAgICAgbG9hZGlzRnJvbUluc3Ry
dWN0aW9uKDEsIHQyKQogICAgIHN0b3JlcSB0MCwgW2NmciwgdDIsIDhdCisKKyAgICBsb2FkcSBF
eGNlcHRpb246Om1fdmFsdWVbdDBdLCB0MworICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0
MikKKyAgICBzdG9yZXEgdDMsIFtjZnIsIHQyLCA4XQorCiAgICAgdHJhY2VFeGVjdXRpb24oKQot
ICAgIGRpc3BhdGNoKDIpCisgICAgZGlzcGF0Y2goMykKIAogCiBfbGxpbnRfb3BfZW5kOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJ
KHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNv
bnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MTEsMTAgKzgxMSwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIFRyeU5vZGU6OlRyeU5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgU3RhdGVtZW50Tm9kZSogdHJ5QmxvY2ssIGNv
bnN0IElkZW50aWZpZXImIGV4Y2VwdGlvbklkZW50LCBTdGF0ZW1lbnROb2RlKiBjYXRjaEJsb2Nr
LCBTdGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2spCisgICAgaW5saW5lIFRyeU5vZGU6OlRyeU5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgU3RhdGVtZW50Tm9kZSogdHJ5Qmxv
Y2ssIGNvbnN0IElkZW50aWZpZXImIHRocm93blZhbHVlSWRlbnQsIFN0YXRlbWVudE5vZGUqIGNh
dGNoQmxvY2ssIFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jaykKICAgICAgICAgOiBTdGF0ZW1l
bnROb2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1fdHJ5QmxvY2sodHJ5QmxvY2spCi0gICAgICAg
ICwgbV9leGNlcHRpb25JZGVudChleGNlcHRpb25JZGVudCkKKyAgICAgICAgLCBtX3Rocm93blZh
bHVlSWRlbnQodGhyb3duVmFsdWVJZGVudCkKICAgICAgICAgLCBtX2NhdGNoQmxvY2soY2F0Y2hC
bG9jaykKICAgICAgICAgLCBtX2ZpbmFsbHlCbG9jayhmaW5hbGx5QmxvY2spCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTg1MTgxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTExLDcgKzE1MTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7
CiAKICAgICAgICAgU3RhdGVtZW50Tm9kZSogbV90cnlCbG9jazsKLSAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgbV9leGNlcHRpb25JZGVudDsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbV90
aHJvd25WYWx1ZUlkZW50OwogICAgICAgICBTdGF0ZW1lbnROb2RlKiBtX2NhdGNoQmxvY2s7CiAg
ICAgICAgIFN0YXRlbWVudE5vZGUqIG1fZmluYWxseUJsb2NrOwogICAgIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCShyZXZpc2lvbiAxODUxODEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJD
YWxsRGF0YS5oIgogCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJs
ZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgpA
QCAtMzksMTUgKzQwLDE1IEBAIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
ZnUKICAgICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZUNhbGwoZXhlYywgYXNP
YmplY3QoZnVuY3Rpb25PYmplY3QpLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJn
cyk7CiB9CiAKLUpTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb25P
YmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBKU1ZhbHVlKiBleGNlcHRpb24pCitK
U1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxs
VHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgRXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pCiB7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlw
ZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0g
ZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+ZXhj
ZXB0aW9uKCk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuZWRFeGNl
cHRpb24gPSBudWxscHRyOwogICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEu
aAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fs
bERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogbmFtZXNwYWNlIEpTQyB7
CiAKIGNsYXNzIEFyZ0xpc3Q7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiBj
bGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7CiBjbGFzcyBKU09iamVjdDsKQEAgLTU4LDcgKzU5LDcg
QEAgdW5pb24gQ2FsbERhdGEgewogfTsKIAogSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxs
KEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlLCBjb25zdCBDYWxs
RGF0YSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7Ci1KU19FWFBPUlRfUFJJ
VkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2Fs
bFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
LCBKU1ZhbHVlKiBleGNlcHRpb24pOworSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEV4
ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0
YSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiwgRXhjZXB0aW9uKiYgcmV0dXJu
ZWRFeGNlcHRpb24pOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAi
Q29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgpAQCAtNjAsMTkgKzYxLDE4IEBAIGJvb2wgY2hlY2tT
eW50YXgoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2QKICAgICAgICAgSlNQYXJzZXJTdHJpY3RNb2Rl
OjpOb3RTdHJpY3QsIEpTUGFyc2VyQ29kZVR5cGU6OlByb2dyYW0sIGVycm9yKTsKIH0KIAotSlNW
YWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUqIHJldHVybmVkRXhjZXB0aW9uKQorSlNWYWx1ZSBl
dmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKQogewogICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuYXRvbWlj
U3RyaW5nVGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZtKCkuaXNDb2xsZWN0b3JCdXN5KCkpOworICAgIHJl
dHVybmVkRXhjZXB0aW9uID0gbnVsbHB0cjsKIAogICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShz
b3VyY2UpOwogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0
YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CiAgICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAg
IGlmIChyZXR1cm5lZEV4Y2VwdGlvbikKLSAgICAgICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvbiA9
IGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCk7Ci0KKyAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBl
eGVjLT52bSgpLmV4Y2VwdGlvbigpOwogICAgICAgICBleGVjLT52bSgpLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KQEAgLTgzLDkgKzgzLDcg
QEAgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IAogICAgIEpTVmFsdWUg
cmVzdWx0ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZShwcm9ncmFtLCBleGVjLCB0aGlz
T2JqKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBpZiAocmV0
dXJuZWRFeGNlcHRpb24pCi0gICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb24gPSBleGVjLT5l
eGNlcHRpb24oKTsKLQorICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlv
bigpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21wbGV0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tcGxldGlvbi5oCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21wbGV0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDggQEAKICNp
bmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewotICAgIAorCitjbGFzcyBF
eGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBKU1Njb3BlOwogY2xhc3MgUGFyc2Vy
RXJyb3I7CkBAIC0zNSw3ICszNiwxMiBAQCBjbGFzcyBWTTsKIAogSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBjaGVja1N5bnRheChWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJzZXJFcnJvciYpOwog
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgSlNWYWx1ZSogZXhjZXB0aW9uID0gMCk7Ci1KU19FWFBPUlRfUFJJVkFURSBKU1Zh
bHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IEpTVmFsdWUoKSwgSlNWYWx1ZSogZXhjZXB0aW9uID0gMCk7CitKU19FWFBPUlRfUFJJ
VkFURSBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgRXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pOworaW5saW5lIEpT
VmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlLCBKU1ZhbHVlIHRoaXNWYWx1ZSA9IEpTVmFsdWUoKSkKK3sKKyAgICBFeGNlcHRpb24qIHVu
dXNlZDsKKyAgICByZXR1cm4gZXZhbHVhdGUoZXhlYywgc291cmNlQ29kZSwgdGhpc1ZhbHVlLCB1
bnVzZWQpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvci5oCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBAIEpT
X0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0aHJvd1R5cGVFcnIKIEpTX0VYUE9SVF9QUklWQVRF
IEpTT2JqZWN0KiB0aHJvd1N5bnRheEVycm9yKEV4ZWNTdGF0ZSopOwogCiAvLyBDb252ZW5pZW5j
ZSB3cmFwcGVycywgd3JhcCByZXN1bHQgYXMgYW4gRW5jb2RlZEpTVmFsdWUuCitpbmxpbmUgdm9p
ZCB0aHJvd1ZNRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikgeyBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7IH0KIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSB0aHJvd1ZNRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGVycm9yKSB7
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBl
cnJvcikpOyB9CiBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTVR5cGVFcnJvcihFeGVjU3Rh
dGUqIGV4ZWMpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjKSk7
IH0KIGlubGluZSBFbmNvZGVkSlNWYWx1ZSB0aHJvd1ZNVHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd1R5cGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UpKTsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgorCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEV4
Y2VwdGlvbjo6c19pbmZvID0geyAiRXhjZXB0aW9uIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShFeGNlcHRpb24pIH07CisKK0V4Y2VwdGlvbiogRXhjZXB0aW9uOjpjcmVh
dGUoVk0mIHZtLCBKU1ZhbHVlIHRocm93blZhbHVlKQoreworICAgIEV4Y2VwdGlvbiogcmVzdWx0
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXhjZXB0aW9uPih2bS5oZWFwKSkgRXhjZXB0
aW9uKHZtLCB0aHJvd25WYWx1ZSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBFeGNlcHRpb246OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQoreworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9u
Kj4oY2VsbCk7CisgICAgZXhjZXB0aW9uLT5FeGNlcHRpb246On5FeGNlcHRpb24oKTsKK30KKwor
U3RydWN0dXJlKiBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBFeGNlcHRpb246OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBF
eGNlcHRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXhjZXB0aW9uKj4oY2VsbCk7CisgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICBpZiAoIXRoaXNPYmplY3Qt
Pm1fdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXRoaXNPYmplY3QtPm1fdmFsdWUu
Z2V0KCkuaXNDZWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV92YWx1ZSk7Cit9CisKK0V4Y2VwdGlvbjo6RXhjZXB0aW9uKFZNJiB2bSwgSlNW
YWx1ZSB0aHJvd25WYWx1ZSkKKyAgICA6IEJhc2Uodm0sIHZtLmV4Y2VwdGlvblN0cnVjdHVyZS5n
ZXQoKSkKK3sKKyAgICBtX3ZhbHVlLnNldCh2bSwgdGhpcywgdGhyb3duVmFsdWUpOworCisgICAg
VmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7CisgICAgdm0uaW50ZXJwcmV0ZXItPmdldFN0
YWNrVHJhY2Uoc3RhY2tUcmFjZSk7CisgICAgbV9zdGFjayA9IFJlZkNvdW50ZWRBcnJheTxTdGFj
a0ZyYW1lPihzdGFja1RyYWNlKTsKK30KKworRXhjZXB0aW9uOjp+RXhjZXB0aW9uKCkKK3sKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV4Y2VwdGlvbl9o
CisjZGVmaW5lIEV4Y2VwdGlvbl9oCisKKyNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KKworbmFtZXNwYWNlIEpTQyB7CisgICAgCitjbGFz
cyBFeGNlcHRpb24gOiBwdWJsaWMgSlNPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNP
YmplY3QgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBT
dHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBzdGF0aWMg
RXhjZXB0aW9uKiBjcmVhdGUoVk0mLCBKU1ZhbHVlIHRocm93blZhbHVlKTsKKworICAgIHN0YXRp
YyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IHZhbHVlT2Zmc2V0KCkKKyAgICB7
CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhjZXB0aW9uLCBtX3ZhbHVlKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgRXhjZXB0aW9uKiBjYXN0KEpTVmFsdWUgZXhjZXB0aW9uQXNKU1Zh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxFeGNlcHRpb24qPihleGNlcHRpb25B
c0pTVmFsdWUuYXNDZWxsKCkpOworICAgIH0KKworICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CisgICAgY29uc3QgUmVmQ291bnRlZEFycmF5PFN0YWNr
RnJhbWU+JiBzdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2s7IH0KKworICAgIGJvb2wgZGlk
Tm90aWZ5SW5zcGVjdG9yT2ZUaHJvdygpIGNvbnN0IHsgcmV0dXJuIG1fZGlkTm90aWZ5SW5zcGVj
dG9yT2ZUaHJvdzsgfQorICAgIHZvaWQgc2V0RGlkTm90aWZ5SW5zcGVjdG9yT2ZUaHJvdygpIHsg
bV9kaWROb3RpZnlJbnNwZWN0b3JPZlRocm93ID0gdHJ1ZTsgfQorCisgICAgfkV4Y2VwdGlvbigp
OworCitwcml2YXRlOgorICAgIEV4Y2VwdGlvbihWTSYsIEpTVmFsdWUgdGhyb3duVmFsdWUpOwor
CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmFsdWU7CisgICAgUmVmQ291bnRlZEFycmF5
PFN0YWNrRnJhbWU+IG1fc3RhY2s7CisgICAgYm9vbCBtX2RpZE5vdGlmeUluc3BlY3Rvck9mVGhy
b3cgeyBmYWxzZSB9OworCisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRXhjZXB0aW9uX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
Y3BwCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkVy
cm9ySGFuZGxpbmdTY29wZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNOb3RBbk9iamVjdC5oIgogI2lu
Y2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC01OSwxNyArNjAsMTEgQEAgSlNPYmplY3QqIGNyZWF0
ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcAogICAgIHJldHVybiBUZXJtaW5hdGVkRXhlY3V0aW9u
RXJyb3I6OmNyZWF0ZSgqdm0pOwogfQogCi1ib29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2Vw
dGlvbihKU09iamVjdCogb2JqZWN0KQorYm9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRp
b24oRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7Ci0gICAgcmV0dXJuIG9iamVjdC0+aW5oZXJpdHMo
VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjppbmZvKCkpOworICAgIHJldHVybiBleGNlcHRpb24t
PnZhbHVlKCkuaW5oZXJpdHMoVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjppbmZvKCkpOwogfQog
Ci1ib29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU1ZhbHVlIHZhbHVlKQotewot
ICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cyhUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmluZm8o
KSk7Ci19Ci0KLQogSlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZC4iKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCShyZXZpc2lvbiAx
ODUxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0eXBl
ZGVmIEpTT2JqZWN0KiAoKkVycm9yRmFjdG9yeSkoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwg
RXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIpOwogCiBKU09iamVjdCogY3JlYXRlVGVybWlu
YXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihWTSopOwotYm9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25F
eGNlcHRpb24oSlNPYmplY3QqKTsKLUpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNUZXJtaW5hdGVk
RXhlY3V0aW9uRXhjZXB0aW9uKEpTVmFsdWUpOworSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1Rl
cm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oRXhjZXB0aW9uKik7CiBKU19FWFBPUlRfUFJJVkFU
RSBKU09iamVjdCogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgU3RyaW5n
JiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIpOwogSlNfRVhQT1JUX1BSSVZBVEUgSlNP
YmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqKTsKIEpTT2JqZWN0KiBj
cmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVy
LmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1
ZGUgIkdldHRlclNldHRlci5oIgogCiAjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb24uaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNzUsNyArNzYsNyBAQCBKU1ZhbHVlIGNh
bGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgLy8gRklYTUU6IFNvbWUgY2FsbGVy
cyBtYXkgaW52b2tlIGdldCgpIHdpdGhvdXQgY2hlY2tpbmcgZm9yIGFuIGV4Y2VwdGlvbiBmaXJz
dC4KICAgICAvLyBXZSB3b3JrIGFyb3VuZCB0aGF0IGJ5IGNoZWNraW5nIGhlcmUuCiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gZXhlYy0+ZXhjZXB0aW9uKCk7
CisgICAgICAgIHJldHVybiBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKTsKIAogICAgIEpTT2Jq
ZWN0KiBnZXR0ZXIgPSBqc0Nhc3Q8R2V0dGVyU2V0dGVyKj4oZ2V0dGVyU2V0dGVyKS0+Z2V0dGVy
KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRl
cmF0b3JPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODksNyArODksNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yU3RlcChFeGVjU3RhdGUqIGV4ZWMsIEpTCiAK
IHZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgaXRlcmF0b3IpCiB7
Ci0gICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBudWxs
cHRyOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBleGNlcHRpb24g
PSBleGVjLT5leGNlcHRpb24oKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKQEAg
LTk5LDcgKzk5LDcgQEAgdm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAocmV0dXJuRnVuY3Rpb24uaXNVbmRlZmluZWQoKSkg
ewotICAgICAgICBpZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIGlmIChleGNlcHRp
b24pCiAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBpdGVy
YXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIENhbGxEYXRhIHJldHVybkZ1bmN0
aW9uQ2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgcmV0dXJuRnVuY3Rpb25DYWxsVHlwZSA9IGdldENh
bGxEYXRhKHJldHVybkZ1bmN0aW9uLCByZXR1cm5GdW5jdGlvbkNhbGxEYXRhKTsKICAgICBpZiAo
cmV0dXJuRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKLSAgICAgICAgaWYgKCFl
eGNlcHRpb24uaXNFbXB0eSgpKQorICAgICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICAgICAg
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKQEAgLTExNyw3ICsxMTcsNyBAQCB2
b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgcmV0dXJuRnVuY3Rpb25Bcmd1bWVudHM7CiAgICAgSlNWYWx1ZSBpbm5lclJlc3Vs
dCA9IGNhbGwoZXhlYywgcmV0dXJuRnVuY3Rpb24sIHJldHVybkZ1bmN0aW9uQ2FsbFR5cGUsIHJl
dHVybkZ1bmN0aW9uQ2FsbERhdGEsIGl0ZXJhdG9yLCByZXR1cm5GdW5jdGlvbkFyZ3VtZW50cyk7
CiAKLSAgICBpZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpIHsKKyAgICBpZiAoZXhjZXB0aW9uKSB7
CiAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRhdGVQcm90b3R5cGUu
aCIKICNpbmNsdWRlICJFcnJvckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgi
CiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2lu
Y2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KFBST01JU0VTKQogCiAjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIK
ICNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKQEAgLTEzNiw3ICsxMzcsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKICAgICAvLyAxNC4gSWYg
cmVzdWx0IGlzIGFuIGFicnVwdCBjb21wbGV0aW9uLCBjYWxsIFByb21pc2VSZWplY3QocHJvbWlz
ZSwgcmVzdWx0LltbdmFsdWVdXSkuCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0g
ICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIEpT
VmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7CiAgICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KHZtLCBleGNl
cHRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVm
ZXJyZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvbWlzZURlZmVycmVkLmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFBST01JU0VTKQogCiAjaW5jbHVkZSAiRXJyb3IuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb21pc2UuaCIKQEAgLTE1
MCw3ICsxNTEsNyBAQCBUaGVuYWJsZVN0YXR1cyB1cGRhdGVEZWZlcnJlZEZyb21Qb3RlbnRpCiAg
ICAgICAgIC8vIGkuIExldCAncmVqZWN0UmVzdWx0JyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcg
dGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZgogICAgICAgICAvLyAgICBkZWZlcnJlZC5b
W1JlamVjdF1dIHdpdGggdW5kZWZpbmVkIGFzIHRoaXNBcmd1bWVudCBhbmQgYSBMaXN0IGNvbnRh
aW5pbmcKICAgICAgICAgLy8gICAgdGhlbi5bW3ZhbHVlXV0gYXMgYXJndW1lbnRzTGlzdC4KLSAg
ICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgSlNW
YWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKTsKICAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAgICAgICBwZXJmb3JtRGVmZXJyZWRSZWplY3QoZXhl
YywgZGVmZXJyZWQsIGV4Y2VwdGlvbik7CkBAIC0xODUsNyArMTg2LDcgQEAgVGhlbmFibGVTdGF0
dXMgdXBkYXRlRGVmZXJyZWRGcm9tUG90ZW50aQogICAgICAgICAvLyBpLiBMZXQgJ3JlamVjdFJl
c3VsdCcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRo
b2Qgb2YKICAgICAgICAgLy8gICAgZGVmZXJyZWQuW1tSZWplY3RdXSB3aXRoIHVuZGVmaW5lZCBh
cyB0aGlzQXJndW1lbnQgYW5kIGEgTGlzdCBjb250YWluaW5nCiAgICAgICAgIC8vICAgIHRoZW5D
YWxsUmVzdWx0LltbdmFsdWVdXSBhcyBhcmd1bWVudHNMaXN0LgotICAgICAgICBKU1ZhbHVlIGV4
Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9
IGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1ZSgpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOwogCiAgICAgICAgIHBlcmZvcm1EZWZlcnJlZFJlamVjdChleGVjLCBkZWZlcnJlZCwgZXhj
ZXB0aW9uKTsKQEAgLTIyOCw3ICsyMjksNyBAQCB2b2lkIHBlcmZvcm1EZWZlcnJlZFJlamVjdChF
eGVjU3RhdGUqIGV4CiBKU1ZhbHVlIGFicnVwdFJlamVjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
UHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCkKIHsKICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOwotICAgIEpTVmFsdWUgYXJndW1lbnQgPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICBK
U1ZhbHVlIGFyZ3VtZW50ID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7CiAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKIAogICAgIC8vIGkuIExldCAncmVqZWN0UmVzdWx0JyBiZSB0aGUg
cmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUmVhY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVJlYWN0aW9uLmNw
cAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9taXNlUmVhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYg
RU5BQkxFKFBST01JU0VTKQogCiAjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElu
bGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgpAQCAtODgsNyArODksNyBAQCB2
b2lkIEV4ZWN1dGVQcm9taXNlUmVhY3Rpb25NaWNyb3Rhc2s6OnJ1CiAgICAgLy8gICAgW1tDYWxs
XV0gaW50ZXJuYWwgbWV0aG9kIG9mIGRlZmVycmVkLltbUmVqZWN0XV0gcGFzc2luZyB1bmRlZmlu
ZWQgYXMgdGhpc0FyZ3VtZW50CiAgICAgLy8gICAgYW5kIGEgTGlzdCBjb250YWluaW5nIGhhbmRs
ZXJSZXN1bHQuW1t2YWx1ZV1dIGFzIGFyZ3VtZW50c0xpc3QuCiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9u
KCk7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVl
KCk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgcGVyZm9ybURl
ZmVycmVkUmVqZWN0KGV4ZWMsIGRlZmVycmVkLCBleGNlcHRpb24pOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBA
CiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNp
bmNsdWRlICJFcnJvckluc3RhbmNlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVk
ZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgpAQCAtMjM1LDYgKzIzNiw3IEBAIFZNOjpWTShWTVR5
cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICB3ZWFrTWFwRGF0YVN0cnVjdHVyZS5z
ZXQoKnRoaXMsIFdlYWtNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CiAgICAgaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVmFsdWU6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBmdW5jdGlvblJhcmVE
YXRhU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGV4Y2VwdGlvblN0cnVjdHVyZS5zZXQoKnRoaXMs
IEV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2lmIEVO
QUJMRShQUk9NSVNFUykKICAgICBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBK
U1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwog
ICAgIHByb21pc2VSZWFjdGlvblN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJvbWlzZVJlYWN0aW9u
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkBAIC01NDUsNyArNTQ3LDcg
QEAgdm9pZCBWTTo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKQogICAgIGhlYXAuY29sbGVjdEFs
bEdhcmJhZ2UoKTsKIH0KIAotSlNWYWx1ZSBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGVycm9yKQordm9pZCBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKIHsKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRo
cm93KCkpIHsKICAgICAgICAgZGF0YUxvZygiSW4gY2FsbCBmcmFtZSAiLCBSYXdQb2ludGVyKGV4
ZWMpLCAiIGZvciBjb2RlIGJsb2NrICIsICpleGVjLT5jb2RlQmxvY2soKSwgIlxuIik7CkBAIC01
NTMsMzcgKzU1NSwyNCBAQCBKU1ZhbHVlIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
CiAgICAgfQogICAgIAogICAgIEFTU0VSVChleGVjID09IHRvcENhbGxGcmFtZSB8fCBleGVjID09
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpIHx8IGV4ZWMgPT0gZXhl
Yy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpOwotICAgIAotICAgIFZlY3Rv
cjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwotICAgIGludGVycHJldGVyLT5nZXRTdGFja1RyYWNl
KHN0YWNrVHJhY2UpOwotICAgIG1fZXhjZXB0aW9uU3RhY2sgPSBSZWZDb3VudGVkQXJyYXk8U3Rh
Y2tGcmFtZT4oc3RhY2tUcmFjZSk7Ci0gICAgbV9leGNlcHRpb24gPSBlcnJvcjsKLQotICAgIHJl
dHVybiBlcnJvcjsKLX0KLSAgICAKLUpTT2JqZWN0KiBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogZXJyb3IpCi17Ci0gICAgcmV0dXJuIGFzT2JqZWN0KHRocm93
RXhjZXB0aW9uKGV4ZWMsIEpTVmFsdWUoZXJyb3IpKSk7Ci19Ci12b2lkIFZNOjpnZXRFeGNlcHRp
b25JbmZvKEpTVmFsdWUmIGV4Y2VwdGlvbiwgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+JiBl
eGNlcHRpb25TdGFjaykKLXsKLSAgICBleGNlcHRpb24gPSBtX2V4Y2VwdGlvbjsKLSAgICBleGNl
cHRpb25TdGFjayA9IG1fZXhjZXB0aW9uU3RhY2s7Ci19Ci12b2lkIFZNOjpzZXRFeGNlcHRpb25J
bmZvKEpTVmFsdWUmIGV4Y2VwdGlvbiwgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+JiBleGNl
cHRpb25TdGFjaykKLXsKLSAgICBtX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKLSAgICBtX2V4Y2Vw
dGlvblN0YWNrID0gZXhjZXB0aW9uU3RhY2s7CisgICAgc2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7
CiB9CiAKLXZvaWQgVk06OmNsZWFyRXhjZXB0aW9uKCkKK0pTVmFsdWUgVk06OnRocm93RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aHJvd25WYWx1ZSkKIHsKLSAgICBtX2V4Y2Vw
dGlvbiA9IEpTVmFsdWUoKTsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbjsKKyAgICBpZiAodGhy
b3duVmFsdWUuaXNDZWxsKCkgJiYgdGhyb3duVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09
IGV4Y2VwdGlvblN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgZXhjZXB0aW9uID0ganNDYXN0PEV4
Y2VwdGlvbio+KHRocm93blZhbHVlLmFzQ2VsbCgpKTsKKyAgICBlbHNlCisgICAgICAgIGV4Y2Vw
dGlvbiA9IEV4Y2VwdGlvbjo6Y3JlYXRlKCp0aGlzLCB0aHJvd25WYWx1ZSk7CisKKyAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOworICAgIHJldHVybiBKU1ZhbHVlKGV4Y2VwdGlv
bik7CiB9Ci12b2lkIFZNOjogY2xlYXJFeGNlcHRpb25TdGFjaygpCisKK0pTT2JqZWN0KiBWTTo6
dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZXJyb3IpCiB7Ci0gICAg
bV9leGNlcHRpb25TdGFjayA9IFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPigpOworICAgIHJl
dHVybiBhc09iamVjdCh0aHJvd0V4Y2VwdGlvbihleGVjLCBKU1ZhbHVlKGVycm9yKSkpOwogfQog
CiB2b2lkIFZNOjpzZXRTdGFja1BvaW50ZXJBdFZNRW50cnkodm9pZCogc3ApCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDYgQEAK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+CiAj
aW5jbHVkZSA8d3RmL1NpbXBsZVN0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNrQm91bmRzLmg+
CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CkBAIC03OCw2ICs3Nyw3IEBA
IGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNoZTsKIGNsYXNzIENvbW1vbklkZW50aWZp
ZXJzOwogY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgRXhjZXB0aW9uOwogY2xhc3MgSGFuZGxlU3Rh
Y2s7CiBjbGFzcyBUeXBlUHJvZmlsZXI7CiBjbGFzcyBUeXBlUHJvZmlsZXJMb2c7CkBAIC0yNzQs
NiArMjc0LDcgQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYWtNYXBEYXRhU3Ry
dWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVmFsdWVTdHJ1Y3R1cmU7CiAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZTsKKyAgICBTdHJv
bmc8U3RydWN0dXJlPiBleGNlcHRpb25TdHJ1Y3R1cmU7CiAjaWYgRU5BQkxFKFBST01JU0VTKQog
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VEZWZlcnJlZFN0cnVjdHVyZTsKICAgICBTdHJv
bmc8U3RydWN0dXJlPiBwcm9taXNlUmVhY3Rpb25TdHJ1Y3R1cmU7CkBAIC0zNzIsMTQgKzM3Mywx
MyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRhcmdldE1h
Y2hpbmVQQ0ZvclRocm93KTsKICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNs
ZWFyRXhjZXB0aW9uKCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhckV4Y2VwdGlv
blN0YWNrKCk7Ci0gICAgdm9pZCBnZXRFeGNlcHRpb25JbmZvKEpTVmFsdWUmIGV4Y2VwdGlvbiwg
UmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+JiBleGNlcHRpb25TdGFjayk7Ci0gICAgdm9pZCBz
ZXRFeGNlcHRpb25JbmZvKEpTVmFsdWUmIGV4Y2VwdGlvbiwgUmVmQ291bnRlZEFycmF5PFN0YWNr
RnJhbWU+JiBleGNlcHRpb25TdGFjayk7Ci0gICAgSlNWYWx1ZSBleGNlcHRpb24oKSBjb25zdCB7
IHJldHVybiBtX2V4Y2VwdGlvbjsgfQotICAgIEpTVmFsdWUqIGFkZHJlc3NPZkV4Y2VwdGlvbigp
IHsgcmV0dXJuICZtX2V4Y2VwdGlvbjsgfQotICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxTdGFj
a0ZyYW1lPiYgZXhjZXB0aW9uU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvblN0YWNr
OyB9CisgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSBudWxscHRyOyB9
CisgICAgdm9pZCBzZXRFeGNlcHRpb24oRXhjZXB0aW9uKiBleGNlcHRpb24pIHsgbV9leGNlcHRp
b24gPSBleGNlcHRpb247IH0KIAorICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9leGNlcHRpb247IH0KKyAgICBKU0NlbGwqKiBhZGRyZXNzT2ZFeGNlcHRpb24oKSB7
IHJldHVybiByZWludGVycHJldF9jYXN0PEpTQ2VsbCoqPigmbV9leGNlcHRpb24pOyB9CisKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEV4Y2Vw
dGlvbiopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdGhyb3dFeGNlcHRpb24oRXhl
Y1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93
RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiAKQEAgLTU2OSwxMiArNTY5LDExIEBA
IHByaXZhdGU6CiAjZW5kaWYKICNlbmRpZgogICAgIHZvaWQqIG1fbGFzdFN0YWNrVG9wOwotICAg
IEpTVmFsdWUgbV9leGNlcHRpb247CisgICAgRXhjZXB0aW9uKiBtX2V4Y2VwdGlvbiB7IG51bGxw
dHIgfTsKICAgICBib29sIG1faW5EZWZpbmVPd25Qcm9wZXJ0eTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICBMZWdhY3lQcm9maWxlciogbV9lbmFibGVk
UHJvZmlsZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ1aWx0aW5FeGVjdXRhYmxlcz4gbV9idWls
dGluRXhlY3V0YWJsZXM7Ci0gICAgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+IG1fZXhjZXB0
aW9uU3RhY2s7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxXYXRjaHBvaW50U2V0Pj4gbV9p
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnRTZXRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJv
ZmlsZXI+IG1fdHlwZVByb2ZpbGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsZXJM
b2c+IG1fdHlwZVByb2ZpbGVyTG9nOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk1FbnRyeVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw5ICs0OSw2IEBAIFZNRW50cnlTY29wZTo6Vk1FbnRyeVNjb3BlKFZNJiB2bSwgSlNHbG8KICAg
ICAgICAgLy8gb2JzZXJ2ZSB0aW1lIHhvbmUgY2hhbmdlcy4KICAgICAgICAgdm0ucmVzZXREYXRl
Q2FjaGUoKTsKICAgICB9Ci0KLSAgICAvLyBDbGVhciB0aGUgY2FwdHVyZWQgZXhjZXB0aW9uIHN0
YWNrIGJldHdlZW4gZW50cmllcwotICAgIHZtLmNsZWFyRXhjZXB0aW9uU3RhY2soKTsKIH0KIAog
dm9pZCBWTUVudHJ5U2NvcGU6OnNldEVudHJ5U2NvcGVEaWRQb3BMaXN0ZW5lcih2b2lkKiBrZXks
IEVudHJ5U2NvcGVEaWRQb3BMaXN0ZW5lciBsaXN0ZW5lcikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDgxIEBACisyMDE1LTA2LTAzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBmaW5hbGx5IGJsb2NrcyBzaG91bGQgbm90IHNldCB0aGUgZXhjZXB0aW9u
IHN0YWNrIHRyYWNlIHdoZW4gcmUtdGhyb3dpbmcgdGhlIGV4Y2VwdGlvbi4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTUyNQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0byB1c2UgdGhlIG5l
dyBKU0M6OkV4Y2VwdGlvbiBvYmplY3QuCisKKyAgICAgICAgVGVzdDogaW5zcGVjdG9yL2RlYnVn
Z2VyL2JyZWFrLW9uLWV4Y2VwdGlvbnMuaHRtbAorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9FeGNlcHRpb24uaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlND
YWxsYmFja0RhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDYWxsYmFja0RhdGE6Omludm9r
ZUNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3Vw
TmFtZXNwYWNlVVJJKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6anNBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRFeGNl
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0Q3VycmVudEV4Y2VwdGlvbik6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNFcnJvckhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFcnJvckhhbmRsZXI6Omhh
bmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZGlkTGVhdmVTY3JpcHRDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmZ1bmN0aW9uQ2FsbEhhbmRsZXJGcm9tQW55VGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OmV2YWx1YXRlSGFuZGxlckZyb21BbnlUaHJlYWQpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpjYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWFpblRocmVhZEV4
ZWNTdGF0ZTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNNYWluVGhyZWFkRXhlY1N0
YXRlOjpydW5UYXNrKToKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVkaWFEZXZpY2VzQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVkaWFEZXZpY2VzOjpnZXRVc2VyTWVkaWEp
OgorICAgICAgICAtIEZpeGVkIGEgYnVnIHdoZXJlIHRoZSBleGNlcHRpb24gd2FzIG5vdCBjbGVh
cmVkIGJlZm9yZSBlbnRlcmluZyB0aGUgVk0gdG8KKyAgICAgICAgICBjYWxsIEpTIGNvZGUuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNNdXRhdGlvbkNhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9SZWFkYWJsZUpTU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFByb3BlcnR5RnJv
bU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxsRnVuY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVhZGFibGVKU1N0cmVhbTo6U291cmNlOjpzdGFydCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFj
dGlvbjo6ZXhlY3V0ZUZ1bmN0aW9uSW5Db250ZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmV2YWx1YXRlSW5Xb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxp
emUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6c2V0RXhjZXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNjaGVkdWxlRXhlY3V0aW9u
VGVybWluYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6Ondvcmtlckds
b2JhbFNjb3BlV3JhcHBlcik6CisgICAgICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6
OnJ1bkV2ZW50TG9vcFdoaWxlUGF1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlw
dERlYnVnU2VydmVyOjpyZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dv
cmtlclNjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9XZWJTY3Jp
cHRPYmplY3QubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVKU1dyYXBwZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6YWRkRXhjZXB0aW9uVG9Db25zb2xlKToKKyAgICAgICAgKC1bV2ViU2NyaXB0
T2JqZWN0IGNhbGxXZWJTY3JpcHRNZXRob2Q6d2l0aEFyZ3VtZW50czpdKToKKyAgICAgICAgKC1b
V2ViU2NyaXB0T2JqZWN0IGV2YWx1YXRlV2ViU2NyaXB0Ol0pOgorICAgICAgICAtIENoYW5nZWQg
dG8gY2FsbCBhIHZlcnNpb24gb2YgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZSgpIHRo
YXQgcHJvdmlkZXMKKyAgICAgICAgICBhIHN0dWIgcmV0dXJuZWRFeGNlcHRpb24gYmVjYXVzZSBl
dmFsdWF0ZVdlYlNjcmlwdDogZG9lc24ndCBuZWVkIHRoZSBleGNlcHRpb24uCisKKyAgICAgICAg
KiBpbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6aXNDb250ZW50U2NyaXB0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICogd29ya2Vycy9Xb3Jr
ZXJHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6
aW1wb3J0U2NyaXB0cyk6CisKIDIwMTUtMDYtMDMgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQG5h
dmVyY29ycC5jb20+CiAKICAgICAgICAgW0Nvb3JkaW5hdGVkR3JhcGhpY3NdIE1lcmdlIENvb3Jk
aW5hdGVkVGlsZSBpbnRvIFRpbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3J1bnRpbWUvRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9FeGNlcHRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0V4Y2VwdGlvbl9oCisj
ZGVmaW5lIFdlYkNvcmVfRldEX0V4Y2VwdGlvbl9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
RXhjZXB0aW9uLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2FsbGJhY2tEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NhbGxiYWNrRGF0YS5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAg
KzczLDEwIEBAIEpTVmFsdWUgSlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKEoKIAogICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBKU01haW5UaHJlYWRFeGVj
U3RhdGU6Omluc3RydW1lbnRGdW5jdGlvbkNhbGwoY29udGV4dCwgY2FsbFR5cGUsIGNhbGxEYXRh
KTsKIAotICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0gY29udGV4dC0+aXNEb2N1bWVudCgpCi0gICAgICAgID8gSlNN
YWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIHRoaXNWYWx1ZSwgYXJncywgJmV4Y2VwdGlvbikKLSAgICAgICAgOiBKU0M6OmNhbGwoZXhl
YywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCAmZXhjZXB0
aW9uKTsKKyAgICAgICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzLCBleGNlcHRpb24pCisgICAg
ICAgIDogSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNW
YWx1ZSwgYXJncywgZXhjZXB0aW9uKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkQ2FsbEZ1bmN0aW9uKGNvb2tpZSwgY29udGV4dCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBh
dGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsOCArOTMsOCBAQCBTdHJpbmcg
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hCiAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBwcmVmaXgp
KTsKIAotICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgIEpTVmFsdWUgcmV0dmFsID0gSlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEs
IG1fY3VzdG9tUmVzb2x2ZXIuZ2V0KCksIGFyZ3MsICZleGNlcHRpb24pOworICAgIEV4Y2VwdGlv
biogZXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmV0dmFsID0gSlNNYWluVGhyZWFkRXhlY1N0YXRl
OjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIG1fY3VzdG9tUmVzb2x2
ZXIuZ2V0KCksIGFyZ3MsIGV4Y2VwdGlvbik7CiAKICAgICBTdHJpbmcgcmVzdWx0OwogICAgIGlm
IChleGNlcHRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNs
dWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4K
ICNpbmNsdWRlIDxydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvRXhjZXB0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CkBAIC0x
MzgsNyArMTM5LDcgQEAgSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZQog
ICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCwgbGlz
dCk7CiB9CiAKLXZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBl
eGNlcHRpb24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQordm9pZCByZXBvcnRFeGNlcHRp
b24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBj
YWNoZWRTY3JpcHQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5jdXJyZW50VGhy
ZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhj
ZXB0aW9uKGV4Y2VwdGlvbikpCkBAIC0xNDgsNyArMTQ5LDYgQEAgdm9pZCByZXBvcnRFeGNlcHRp
b24oRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2Fs
bFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
LCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpKTsKICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwotICAgIGV4ZWMtPmNsZWFyU3VwcGxlbWVudGFyeUV4Y2VwdGlv
bkluZm8oKTsKIAogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIGlm
IChKU0RPTVdpbmRvdyogd2luZG93ID0ganNEeW5hbWljQ2FzdDxKU0RPTVdpbmRvdyo+KGdsb2Jh
bE9iamVjdCkpIHsKQEAgLTE2NiwxNCArMTY2LDEzIEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlMKICAgICB9CiAKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAg
IGlmIChFeGNlcHRpb25CYXNlKiBleGNlcHRpb25CYXNlID0gdG9FeGNlcHRpb25CYXNlKGV4Y2Vw
dGlvbikpCisgICAgaWYgKEV4Y2VwdGlvbkJhc2UqIGV4Y2VwdGlvbkJhc2UgPSB0b0V4Y2VwdGlv
bkJhc2UoZXhjZXB0aW9uLT52YWx1ZSgpKSkKICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXhjZXB0
aW9uQmFzZS0+bWVzc2FnZSgpICsgIjogIiAgKyBleGNlcHRpb25CYXNlLT5kZXNjcmlwdGlvbigp
OwogICAgIGVsc2UgewogICAgICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1
MDg3PiBXZWIgSW5zcGVjdG9yOiBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24gc2hvdWxkIG5vdCBl
dmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKICAgICAgICAgLy8gSWYgdGhp
cyBpcyBhIGN1c3RvbiBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRvIHRy
eSBhbmQgZ2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRpb24u
Ci0gICAgICAgIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0g
ICAgICAgIGV4ZWMtPmNsZWFyU3VwcGxlbWVudGFyeUV4Y2VwdGlvbkluZm8oKTsKICAgICB9CiAK
ICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2xv
YmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CkBAIC0xODIsNyArMTgxLDcgQEAg
dm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogCiB2b2lkIHJlcG9ydEN1
cnJlbnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUgZXhjZXB0aW9u
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBleGVjLT5l
eGNlcHRpb24oKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJlcG9ydEV4Y2Vw
dGlvbihleGVjLCBleGNlcHRpb24pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNyArMjQ3LDcg
QEAgdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbgogCiBjb25zdCBKU0M6
Okhhc2hUYWJsZSYgZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShKU0M6OlZNJiwgY29uc3QgSlND
OjpIYXNoVGFibGUmIHN0YXRpY1RhYmxlKTsKIAotV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRF
eGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBDYWNoZWRT
Y3JpcHQqID0gbnVsbHB0cik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIp
Owogdm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiAKIEpTQzo6
SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBFeGNlcHRpb25Db2Rl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5j
cHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJy
b3JIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsMTAgKzk4LDEwIEBAIHZvaWQgSlNF
cnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEUKICAgICAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgdm0uZW50
cnlTY29wZSA/IHZtLmVudHJ5U2NvcGUtPmdsb2JhbE9iamVjdCgpIDogZ2xvYmFsT2JqZWN0KTsK
IAotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRp
b247CiAgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5pc0RvY3VtZW50KCkKLSAgICAgICAgICAgID8gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxs
KGV4ZWMsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdz
LCAmZXhjZXB0aW9uKQotICAgICAgICAgICAgOiBKU0M6OmNhbGwoZXhlYywganNGdW5jdGlvbiwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ3MsICZleGNlcHRpb24pOworICAg
ICAgICAgICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywganNGdW5jdGlvbiwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ3MsIGV4Y2VwdGlvbikKKyAgICAg
ICAgICAgIDogSlNDOjpjYWxsKGV4ZWMsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwg
Z2xvYmFsT2JqZWN0LCBhcmdzLCBleGNlcHRpb24pOwogCiAgICAgICAgIGdsb2JhbE9iamVjdC0+
c2V0Q3VycmVudEV2ZW50KHNhdmVkRXZlbnQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNCwxMCArMTI0LDEwIEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVu
dChTY3JpcHQKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9
IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9uQ2FsbChzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwogCiAgICAgICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gaGFuZGxlRXZlbnRGdW5jdGlvbiA9PSBqc0Z1bmN0aW9uID8gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIGV2ZW50LT5jdXJyZW50VGFyZ2V0KCkpIDoganNGdW5jdGlvbjsKLSAgICAg
ICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uOwogICAg
ICAgICBKU1ZhbHVlIHJldHZhbCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQo
KQotICAgICAgICAgICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgaGFuZGxl
RXZlbnRGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsICZleGNl
cHRpb24pCi0gICAgICAgICAgICA6IEpTQzo6Y2FsbChleGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgJmV4Y2VwdGlvbik7CisgICAg
ICAgICAgICA/IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBoYW5kbGVFdmVudEZ1
bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgZXhjZXB0aW9uKQor
ICAgICAgICAgICAgOiBKU0M6OmNhbGwoZXhlYywgaGFuZGxlRXZlbnRGdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIGV4Y2VwdGlvbik7CiAKICAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwCShyZXZpc2lvbiAxODUxODEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NiwxOCArNDYsMTggQEAgdm9pZCBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmRp
ZExlYXZlU2NyaQogICAgIE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXJBbGxNdXRhdGlvbnMoKTsK
IH0KIAotSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uQ2FsbEhhbmRsZXJGcm9tQW55VGhyZWFkKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5
cGUgY2FsbFR5cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUg
dGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIEpTQzo6SlNWYWx1ZSogZXhjZXB0
aW9uKQorSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uQ2FsbEhhbmRsZXJGcm9tQW55VGhyZWFkKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5
cGUgY2FsbFR5cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUg
dGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIEpTQzo6RXhjZXB0aW9uKiYgcmV0
dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgaWYgKGlzTWFpblRocmVhZCgpKQotICAgICAgICByZXR1
cm4gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxs
VHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgZXhjZXB0aW9uKTsKLSAgICByZXR1cm4g
SlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNW
YWx1ZSwgYXJncywgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTTWFpblRocmVhZEV4ZWNT
dGF0ZTo6Y2FsbChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlz
VmFsdWUsIGFyZ3MsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICByZXR1cm4gSlNDOjpjYWxsKGV4
ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywg
cmV0dXJuZWRFeGNlcHRpb24pOwogfQogCi1KU0M6OkpTVmFsdWUgZXZhbHVhdGVIYW5kbGVyRnJv
bUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKQor
SlNDOjpKU1ZhbHVlIGV2YWx1YXRlSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1Zh
bHVlLCBKU0M6OkV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKQogewogICAgIGlmIChpc01h
aW5UaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVh
dGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuIEpTQzo6
ZXZhbHVhdGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIGV4Y2VwdGlvbik7CisgICAgICAgIHJl
dHVybiBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZSwgdGhpc1Zh
bHVlLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgcmV0dXJuIEpTQzo6ZXZhbHVhdGUoZXhlYywg
c291cmNlLCB0aGlzVmFsdWUsIHJldHVybmVkRXhjZXB0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmgJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCwxNiArNTAsMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc19tYWluVGhyZWFkU3RhdGU7
CiAgICAgfTsKICAgICAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNhbGwoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxs
VHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFs
dWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjYWxsKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpT
VmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IEpTQzo6
Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFy
Z0xpc3QmIGFyZ3MsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pCiAgICAgewog
ICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGUgY3VycmVudFN0YXRlKGV4ZWMpOwotICAgICAg
ICByZXR1cm4gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERh
dGEsIHRoaXNWYWx1ZSwgYXJncywgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y2Fs
bChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFy
Z3MsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICB9OwogCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKQor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZXZhbHVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6
OkV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKQogICAgIHsKICAgICAgICAgSlNNYWluVGhy
ZWFkRXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShleGVjKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6ZXZh
bHVhdGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVy
biBKU0M6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZSwgdGhpc1ZhbHVlLCByZXR1cm5lZEV4Y2VwdGlv
bik7CisgICAgfTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZXZhbHVhdGUoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBKU0M6OkpTVmFsdWUg
dGhpc1ZhbHVlID0gSlNDOjpKU1ZhbHVlKCkpCisgICAgeworICAgICAgICBKU0M6OkV4Y2VwdGlv
biogdW51c2VkOworICAgICAgICByZXR1cm4gZXZhbHVhdGUoZXhlYywgc291cmNlLCB0aGlzVmFs
dWUsIHVudXNlZCk7CiAgICAgfTsKIAogICAgIHN0YXRpYyB2b2lkIHJ1blRhc2soSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTQzo6TWljcm90YXNrJiB0YXNrKQpAQCAtMTIxLDggKzEyNyw4IEBAIHBy
aXZhdGU6CiAgICAgSlNDOjpFeGVjU3RhdGUqIG1fcHJldmlvdXNTdGF0ZTsKIH07CiAKLUpTQzo6
SlNWYWx1ZSBmdW5jdGlvbkNhbGxIYW5kbGVyRnJvbUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSwgY29uc3QgSlNDOjpD
YWxsRGF0YSYsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJn
cywgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pOwotSlNDOjpKU1ZhbHVlIGV2YWx1YXRlSGFuZGxl
ckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmLCBK
U0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbik7CitKU0M6OkpT
VmFsdWUgZnVuY3Rpb25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUsIGNvbnN0IEpTQzo6Q2Fs
bERhdGEmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3Ms
IEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pOworSlNDOjpKU1ZhbHVlIGV2YWx1
YXRlSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJj
ZUNvZGUmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkV4Y2VwdGlvbiomIHJldHVybmVk
RXhjZXB0aW9uKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01lZGlhRGV2aWNlc0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYURldmljZXNDdXN0b20uY3BwCShyZXZp
c2lvbiAxODUxODEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhRGV2aWNl
c0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJK
U0RPTVByb21pc2UuaCIKICNpbmNsdWRlICJKU01lZGlhU3RyZWFtLmgiCiAjaW5jbHVkZSAiSlNO
YXZpZ2F0b3JVc2VyTWVkaWFFcnJvci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTUwLDcgKzUxLDkgQEAgSlNWYWx1ZSBKU01l
ZGlhRGV2aWNlczo6Z2V0VXNlck1lZGlhKEV4ZQogCiAgICAgRGljdGlvbmFyeSBvcHRpb25zKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
LSAgICAgICAgd3JhcHBlci5yZWplY3QoZXhlYy0+ZXhjZXB0aW9uKCkpOworICAgICAgICBFeGNl
cHRpb24qIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgICAgICB3cmFwcGVyLnJlamVjdChleGNlcHRpb24tPnZhbHVlKCkp
OwogICAgICAgICByZXR1cm4gd3JhcHBlci5wcm9taXNlKCk7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFjay5jcHAJKHJl
dmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25D
YWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDggKzg3LDggQEAgdm9pZCBKU011dGF0
aW9uQ2FsbGJhY2s6OmNhbGwoY29uc3QgVmVjdAogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0
aW9uQ2FsbChjb250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwogCi0gICAgSlNWYWx1ZSBleGNl
cHRpb247Ci0gICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGNhbGxiYWNrLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGpzT2JzZXJ2ZXIsIGFyZ3MsICZleGNlcHRpb24pOworICAgIEV4
Y2VwdGlvbiogZXhjZXB0aW9uOworICAgIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVj
LCBjYWxsYmFjaywgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc09ic2VydmVyLCBhcmdzLCBleGNlcHRp
b24pOwogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29v
a2llLCBjb250ZXh0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFi
bGVKU1N0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
UmVhZGFibGVKU1N0cmVhbS5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1JlYWRhYmxlSlNTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3
ICs1Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBnZXRQcm9wZXJ0eUZyb21PYmoKICAgICBy
ZXR1cm4gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBpZGVu
dGlmaWVyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBjYWxsRnVuY3Rpb24oRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGpzRnVuY3Rpb24sIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmd1bWVudHMsIEpTVmFsdWUqIGV4Y2VwdGlvbikKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBjYWxsRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGpzRnVuY3Rpb24sIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMsIEV4Y2VwdGlvbiomIGV4
Y2VwdGlvbikKIHsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IGdldENhbGxEYXRhKGpzRnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTEwMCw4ICsxMDAsOCBA
QCB2b2lkIFJlYWRhYmxlSlNTdHJlYW06OlNvdXJjZTo6c3RhcnQoRXhlCiAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocmVhZGFibGVTdHJl
YW0uanNDb250cm9sbGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpKSk7CiAKLSAgICBKU1ZhbHVlIGV4
Y2VwdGlvbjsKLSAgICBjYWxsRnVuY3Rpb24oJmV4ZWMsIHN0YXJ0RnVuY3Rpb24sIG1fc291cmNl
LmdldCgpLCBhcmd1bWVudHMsICZleGNlcHRpb24pOworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9u
OworICAgIGNhbGxGdW5jdGlvbigmZXhlYywgc3RhcnRGdW5jdGlvbiwgbV9zb3VyY2UuZ2V0KCks
IGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAg
dGhyb3dWTUVycm9yKCZleGVjLCBleGNlcHRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiAxODUxODEpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OSwxMSArOTksMTEgQEAgdm9pZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGVGdW5j
dGlvbkluQwogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEpT
TWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9uQ2FsbCgmY29udGV4dCwgY2Fs
bFR5cGUsIGNhbGxEYXRhKTsKIAotICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIEV4Y2VwdGlv
biogZXhjZXB0aW9uOwogICAgIGlmIChpczxEb2N1bWVudD4oY29udGV4dCkpCi0gICAgICAgIEpT
TWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBtX2Z1bmN0aW9uLmdldCgpLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgJmV4Y2VwdGlvbik7CisgICAgICAgIEpTTWFp
blRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBtX2Z1bmN0aW9uLmdldCgpLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgZXhjZXB0aW9uKTsKICAgICBlbHNlCi0gICAgICAg
IEpTQzo6Y2FsbChleGVjLCBtX2Z1bmN0aW9uLmdldCgpLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRo
aXNWYWx1ZSwgYXJncywgJmV4Y2VwdGlvbik7CisgICAgICAgIEpTQzo6Y2FsbChleGVjLCBtX2Z1
bmN0aW9uLmdldCgpLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgZXhjZXB0
aW9uKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FsbEZ1bmN0aW9uKGNv
b2tpZSwgJmNvbnRleHQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
MCw5ICsxNjAsOCBAQCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyCiAK
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVTY3JpcHQobV9mcmFtZSwgc291cmNlVVJMLCBzb3Vy
Y2VDb2RlLnN0YXJ0TGluZSgpKTsKIAotICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsK
LQotICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1
YXRlKGV4ZWMsIGpzU291cmNlQ29kZSwgc2hlbGwsICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAg
ICBFeGNlcHRpb24qIGV2YWx1YXRpb25FeGNlcHRpb247CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1
ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywganNTb3VyY2VDb2RlLCBz
aGVsbCwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZEV2YWx1YXRlU2NyaXB0KGNvb2tpZSwgbV9mcmFtZSk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAko
cmV2aXNpb24gMTg1MTgxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1
ZGUgPHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3Rh
bmNlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhj
ZXB0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5oPgpAQCAtMjcwMiw3ICsyNzAzLDcgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IFNlcmlhbAogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlh
bGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIHZhbHVlLCBu
dWxscHRyLCBudWxscHRyKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAg
ICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBl
eGVjLT5leGNlcHRpb24oKSk7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywg
ZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCkpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0yNzMyLDcgKzI3MzMsNyBAQCBKU1Zh
bHVlUmVmIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpCiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IGRlc2VyaWFsaXplKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbnVsbHB0cik7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24p
Ci0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhlYy0+ZXhjZXB0aW9uKCkp
OworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigp
LT52YWx1ZSgpKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8aGVhcC9TdHJvbmdJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbi5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJy
b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgpAQCAtOTgsMTUgKzk5LDE1IEBAIHZv
aWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICBpZiAoaXNFeGVjdXRp
b25Gb3JiaWRkZW4oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUgZXhjZXB0aW9uOwotICAgIGV2YWx1YXRlKHNvdXJjZUNvZGUsICZleGNlcHRpb24pOwot
ICAgIGlmIChleGNlcHRpb24uanNWYWx1ZSgpKSB7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb247
CisgICAgZXZhbHVhdGUoc291cmNlQ29kZSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9u
KSB7CiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKCkpOwotICAgICAgICByZXBvcnRFeGNl
cHRpb24obV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhjZXB0aW9u
LmpzVmFsdWUoKSk7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihtX3dvcmtlckdsb2JhbFNjb3Bl
V3JhcHBlci0+Z2xvYmFsRXhlYygpLCBleGNlcHRpb24pOwogICAgIH0KIH0KIAotdm9pZCBXb3Jr
ZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3Vy
Y2VDb2RlLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSogZXhjZXB0aW9uKQordm9pZCBXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlLCBKU0M6OkV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKQogewogICAgIGlmIChpc0V4
ZWN1dGlvbkZvcmJpZGRlbigpKQogICAgICAgICByZXR1cm47CkBAIC0xMTYsOCArMTE3LDggQEAg
dm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjbwogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCk7CiAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKLSAgICBKU1ZhbHVlIGV2YWx1YXRpb25FeGNlcHRpb247
Ci0gICAgSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2VDb2RlLmpzU291cmNlQ29kZSgpLCBtX3dv
cmtlckdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsVGhpcygpLCAmZXZhbHVhdGlvbkV4Y2VwdGlv
bik7CisgICAgSlNDOjpFeGNlcHRpb24qIGV2YWx1YXRpb25FeGNlcHRpb247CisgICAgSlNDOjpl
dmFsdWF0ZShleGVjLCBzb3VyY2VDb2RlLmpzU291cmNlQ29kZSgpLCBtX3dvcmtlckdsb2JhbFNj
b3BlV3JhcHBlci0+Z2xvYmFsVGhpcygpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKIAogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYgKChldmFsdWF0aW9uRXhjZXB0aW9uICYmIGlzVGVy
bWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihldmFsdWF0aW9uRXhjZXB0aW9uKSkgCkBAIC0xMzEs
MTYgKzEzMiwxOSBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvCiAg
ICAgICAgIGludCBsaW5lTnVtYmVyID0gMDsKICAgICAgICAgaW50IGNvbHVtbk51bWJlciA9IDA7
CiAgICAgICAgIFN0cmluZyBzb3VyY2VVUkwgPSBzb3VyY2VDb2RlLnVybCgpLnN0cmluZygpOwot
ICAgICAgICBpZiAobV93b3JrZXJHbG9iYWxTY29wZS0+c2FuaXRpemVTY3JpcHRFcnJvcihlcnJv
ck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgc291cmNlVVJMLCBzb3VyY2VDb2Rl
LmNhY2hlZFNjcmlwdCgpKSkKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSgqbV92bSwgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVF
cnJvcihleGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSkpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAqZXhjZXB0aW9uID0gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoKm1fdm0sIGV2YWx1YXRp
b25FeGNlcHRpb24pOworICAgICAgICBpZiAobV93b3JrZXJHbG9iYWxTY29wZS0+c2FuaXRpemVT
Y3JpcHRFcnJvcihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgc291cmNl
VVJMLCBzb3VyY2VDb2RlLmNhY2hlZFNjcmlwdCgpKSkgeworICAgICAgICAgICAgdm0udGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlLmltcGwoKSkpOwor
ICAgICAgICAgICAgZXZhbHVhdGlvbkV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlvbigpOworICAgICAg
ICAgICAgdm0uY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm5l
ZEV4Y2VwdGlvbiA9IGV2YWx1YXRpb25FeGNlcHRpb247CiB9CiAKLXZvaWQgV29ya2VyU2NyaXB0
Q29udHJvbGxlcjo6c2V0RXhjZXB0aW9uKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBl
eGNlcHRpb24pCit2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNldEV4Y2VwdGlvbihKU0M6
OkV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewotICAgIG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVy
LT5nbG9iYWxFeGVjKCktPnZtKCkudGhyb3dFeGNlcHRpb24obV93b3JrZXJHbG9iYWxTY29wZVdy
YXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhjZXB0aW9uLmpzVmFsdWUoKSk7CisgICAgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMgPSBtX3dvcmtlckdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsRXhlYygpOwor
ICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0KIAogdm9p
ZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzY2hlZHVsZUV4ZWN1dGlvblRlcm1pbmF0aW9uKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRD
b250cm9sbGVyLmgJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsOSArNjAs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGV2YWx1
YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKLSAgICAgICAgdm9pZCBldmFsdWF0ZShjb25z
dCBTY3JpcHRTb3VyY2VDb2RlJiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUqIGV4Y2VwdGlvbik7
CisgICAgICAgIHZvaWQgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYsIEpTQzo6RXhj
ZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pOwogCi0gICAgICAgIHZvaWQgc2V0RXhjZXB0aW9u
KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7CisgICAgICAgIHZvaWQgc2V0RXhjZXB0
aW9uKEpTQzo6RXhjZXB0aW9uKik7CiAKICAgICAgICAgLy8gQXN5bmMgcmVxdWVzdCB0byB0ZXJt
aW5hdGUgYSBKUyBydW4gZXhlY3V0aW9uLiBFdmVudHVhbGx5IGNhdXNlcyB0ZXJtaW5hdGlvbgog
ICAgICAgICAvLyBleGNlcHRpb24gcmFpc2VkIGR1cmluZyBKUyBleGVjdXRpb24sIGlmIHRoZSB3
b3JrZXIgdGhyZWFkIGhhcHBlbnMgdG8gcnVuIEpTLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNp
b24gMTg1MTgxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgV29ya2Vy
U2NyaXB0RGVidWdTZXJ2ZXI6OnJ1bkV2ZW50TG8KICAgICB9IHdoaWxlIChyZXN1bHQgIT0gTWVz
c2FnZVF1ZXVlVGVybWluYXRlZCAmJiAhbV9kb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKTsK
IH0KIAotdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cmVwb3J0RXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uKSBjb25zdAordm9pZCBXb3Jr
ZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uKSBjb25zdAogewogICAgIFdlYkNvcmU6OnJlcG9y
dEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAx
ODUxODEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1Nl
cnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIGRpZENvbnRpbnVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBvdmVycmlkZSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgcnVuRXZlbnRMb29wV2hpbGVQYXVzZWQoKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50U2NyaXB0KEpTQzo6RXhlY1N0YXRlKikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9u
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24q
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFdvcmtlckdsb2JhbFNjb3BlKiBtX3dvcmtlckdsb2Jh
bFNjb3BlOwogICAgIExpc3RlbmVyU2V0IG1fbGlzdGVuZXJzOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDE4NTE4
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgaWQgY3JlYXRlSlNXcmFwcGVyKEpTQzo6
SlNPYmplY3QqIG9iamVjdAogICAgIHJldHVybiBbW1tXZWJTY3JpcHRPYmplY3QgYWxsb2NdIF9p
bml0V2l0aEpTT2JqZWN0Om9iamVjdCBvcmlnaW5Sb290T2JqZWN0Om9yaWdpbiByb290T2JqZWN0
OnJvb3RdIGF1dG9yZWxlYXNlXTsKIH0KIAotc3RhdGljIHZvaWQgYWRkRXhjZXB0aW9uVG9Db25z
b2xlKEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlJiBleGNlcHRpb24pCitzdGF0aWMgdm9p
ZCBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoRXhlY1N0YXRlKiBleGVjLCBKU0M6OkV4Y2VwdGlvbiog
ZXhjZXB0aW9uKQogewogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBhc0pTRE9NV2luZG93KGV4
ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKSk7CiAgICAgaWYgKCF3aW5kb3cgfHwgIWV4Y2VwdGlv
bikKQEAgLTEzMSw3ICsxMzEsNyBAQCBzdGF0aWMgdm9pZCBhZGRFeGNlcHRpb25Ub0NvbnNvbGUo
RXhlY1N0CiAKIHN0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwor
ICAgIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjLCBl
eGNlcHRpb24pOwogfQpAQCAtMzQyLDggKzM0Miw4IEBAIC0gKGlkKWNhbGxXZWJTY3JpcHRNZXRo
b2Q6KE5TU3RyaW5nICopbmEKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQogICAgICAg
ICByZXR1cm4gbmlsOwogCi0gICAgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICBKU0M6OkpT
VmFsdWUgcmVzdWx0ID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIFtzZWxmIF9pbXBdLCBhcmdMaXN0LCAmZXhjZXB0aW9uKTsK
KyAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uOworICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQg
PSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSwgW3NlbGYgX2ltcF0sIGFyZ0xpc3QsIGV4Y2VwdGlvbik7CiAKICAgICBpZiAoZXhj
ZXB0aW9uKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjLCBleGNlcHRpb24p
OwpAQCAtMzY2LDcgKzM2Niw3IEBAIC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAq
KXNjcmkKIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAotICAgIEpTQzo6SlNW
YWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywg
bWFrZVNvdXJjZShTdHJpbmcoc2NyaXB0KSksIEpTQzo6SlNWYWx1ZSgpLCAwKTsKKyAgICBKU0M6
OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRlKGV4
ZWMsIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlwdCkpLCBKU0M6OkpTVmFsdWUoKSk7CiAKICAgICBp
ZCByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpy
ZXR1cm5WYWx1ZSBvcmlnaW5Sb290T2JqZWN0OltzZWxmIF9vcmlnaW5Sb290T2JqZWN0XSByb290
T2JqZWN0OltzZWxmIF9yb290T2JqZWN0XV07CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTg1
MTgxKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBib29sIFBhZ2VTY3JpcHREZWJ1
Z1NlcnZlcjo6aXNDb250ZW50U2NyCiAgICAgcmV0dXJuICZjdXJyZW50V29ybGQoZXhlYykgIT0g
Jm1haW5UaHJlYWROb3JtYWxXb3JsZCgpOwogfQogCi12b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZl
cjo6cmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb24pIGNv
bnN0Cit2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgRXhjZXB0aW9uKiBleGNlcHRpb24pIGNvbnN0CiB7CiAgICAgV2ViQ29yZTo6cmVw
b3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAxODUxODEp
CisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ29udGludWUoSlNDOjpKU0dsb2JhbE9iamVjdCopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBydW5FdmVudExvb3BXaGlsZVBhdXNlZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9v
bCBpc0NvbnRlbnRTY3JpcHQoSlNDOjpFeGVjU3RhdGUqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQg
cnVuRXZlbnRMb29wV2hpbGVQYXVzZWRJbnRlcm5hbCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMTg1MTgxKQorKysg
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5Nyw5ICsxOTcsOSBAQCB2b2lkIFdvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRTY3Jp
cHRzKGNvCiAKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzY3JpcHRJbXBvcnRl
ZChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHNjcmlwdExvYWRlci0+aWRlbnRpZmllcigpLCBz
Y3JpcHRMb2FkZXItPnNjcmlwdCgpKTsKIAotICAgICAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSBleGNlcHRpb247Ci0gICAgICAgIG1fc2NyaXB0LT5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2Rl
KHNjcmlwdExvYWRlci0+c2NyaXB0KCksIHNjcmlwdExvYWRlci0+cmVzcG9uc2VVUkwoKSksICZl
eGNlcHRpb24pOwotICAgICAgICBpZiAoIWV4Y2VwdGlvbi5oYXNOb1ZhbHVlKCkpIHsKKyAgICAg
ICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbjsKKyAgICAgICAgbV9zY3JpcHQtPmV2YWx1YXRl
KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSwgc2NyaXB0TG9hZGVyLT5y
ZXNwb25zZVVSTCgpKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikgewogICAg
ICAgICAgICAgbV9zY3JpcHQtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODUxODEpCisrKyBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAor
MjAxNS0wNi0wMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgZmlu
YWxseSBibG9ja3Mgc2hvdWxkIG5vdCBzZXQgdGhlIGV4Y2VwdGlvbiBzdGFjayB0cmFjZSB3aGVu
IHJlLXRocm93aW5nIHRoZSBleGNlcHRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0
aW9uKToKKyAgICAgICAgLSBDaGFuZ2VkIHRvIHVzZSB0aGUgbmV3IEV4Y2VwdGlvbiBvYmplY3Qu
CisKIDIwMTUtMDYtMDIgIEh5dW5nd29vayBMZWUgIDxoeXVuZ3dvb2subGVlQG5hdmVyY29ycC5j
b20+CiAKICAgICAgICAgW0VGTF0gSW1wbGVtZW50IGxvYWRfc3RhcnRlZCBjYWxsYmFjayBpbiBF
d2tQYWdlQ2xpZW50LgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDE4NTE4
MSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sTWVz
c2FnZXMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvRXhjZXB0aW9uLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNM
b2NrLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgpAQCAtNTIyLDcgKzUyMyw3IEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OnJlcG9ydEV4Y2VwdGlvbihKU0MKICAgICBpZiAoIXRvSlNET01X
aW5kb3coZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24oZXhlY1N0YXRlLCB0b0pTKGV4ZWNTdGF0
ZSwgZXhjZXB0aW9uKSk7CisgICAgV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwg
RXhjZXB0aW9uOjpjYXN0KHRvSlMoZXhlY1N0YXRlLCBleGNlcHRpb24pKSk7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRCdW5kbGU6OmRpZENyZWF0ZVBhZ2UoV2ViUGFnZSogcGFnZSkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA2LTAzICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBmaW5hbGx5IGJsb2NrcyBzaG91bGQgbm90
IHNldCB0aGUgZXhjZXB0aW9uIHN0YWNrIHRyYWNlIHdoZW4gcmUtdGhyb3dpbmcgdGhlIGV4Y2Vw
dGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NTUyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoK1tXZWJWaWV3IF9yZXBvcnRFeGNlcHRpb246
aW5Db250ZXh0Ol0pOgorICAgICAgICAoV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQ2FjaGVQ
YXRoSWZOZWNlc3NhcnkpOgorICAgICAgICAtIENoYW5nZWQgdG8gdXNlIHRoZSBuZXcgRXhjZXB0
aW9uIG9iamVjdC4KKwogMjAxNS0wNi0wMyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBw
bGUuY29tPgogCiAgICAgICAgIERlZmluZSBXS19FTkFCTEVfRk9STUFMX0RFTEVHQVRFX1BST1RP
Q09MUyBvbiBpT1MKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlz
aW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw3IEBACiAjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9D
RlNldC5oPgogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTENvbm5lY3Rpb24uaD4KICNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0V4Y2Vw
dGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgogI2ltcG9ydCA8
V2ViQ29yZS9BbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUv
QW5pbWF0aW9uQ29udHJvbGxlci5oPgpAQCAtNzI0LDcgKzcyNSw4IEBAICsgKHZvaWQpX3JlcG9y
dEV4Y2VwdGlvbjooSlNWYWx1ZVJlZilleGMKICAgICBpZiAoIXRvSlNET01XaW5kb3coZXhlY1N0
YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICByZXBv
cnRFeGNlcHRpb24oZXhlY1N0YXRlLCB0b0pTKGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKSk7CisgICAg
RXhjZXB0aW9uKiB2bUV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjo6Y2FzdCh0b0pTKGV4ZWNTdGF0ZSwg
ZXhjZXB0aW9uKSk7CisgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgdm1FeGNlcHRpb24p
OwogfQogCiBzdGF0aWMgdm9pZCBXZWJLaXRJbml0aWFsaXplQXBwbGljYXRpb25DYWNoZVBhdGhJ
Zk5lY2Vzc2FyeSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAxODUxODEpCisrKyBT
b3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBA
QAorMjAxNS0wNi0wMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
ZmluYWxseSBibG9ja3Mgc2hvdWxkIG5vdCBzZXQgdGhlIGV4Y2VwdGlvbiBzdGFjayB0cmFjZSB3
aGVuIHJlLXRocm93aW5nIHRoZSBleGNlcHRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6
cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgLSBDaGFuZ2VkIHRvIHVzZSB0aGUgbmV3IEV4Y2Vw
dGlvbiBvYmplY3QuCisKIDIwMTUtMDYtMDIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIFdlYktpdCBwb2xpY3kgZGVsZWdhdGUgc2hvdWxkIHN1Z2dlc3QgaWYg
YSBuYXZpZ2F0aW9uIHNob3VsZCBiZSBhbGxvd2VkIHRvIG9wZW4gVVJMcyBleHRlcm5hbGx5LgpJ
bmRleDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDE4NTE4MSkKKysrIFNvdXJjZS9XZWJL
aXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBACiAjaW5j
bHVkZSAiV2ViVmlzaXRlZExpbmtTdG9yZS5oIgogI2luY2x1ZGUgInJlc291cmNlLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0V4Y2VwdGlvbi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRp
bmcuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NKU1ZhbHVlLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+CkBAIC02MDI5LDcgKzYwMzAsOCBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OnJlcG9yCiAgICAgaWYgKCF0b0pTRE9NV2luZG93KGV4
ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsK
IAotICAgIFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbihleGVjU3RhdGUsIHRvSlMoZXhlY1N0YXRl
LCBleGNlcHRpb24pKTsKKyAgICBKU0M6OkV4Y2VwdGlvbiogdm1FeGNlcHRpb24gPSBKU0M6OkV4
Y2VwdGlvbjo6Y2FzdCh0b0pTKGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKSk7CisgICAgV2ViQ29yZTo6
cmVwb3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgdm1FeGNlcHRpb24pOwogICAgIHJldHVybiBTX09L
OwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODUxODEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxNS0wNi0wMyAgTWFyayBMYW0g
IDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgZmluYWxseSBibG9ja3Mgc2hvdWxkIG5v
dCBzZXQgdGhlIGV4Y2VwdGlvbiBzdGFjayB0cmFjZSB3aGVuIHJlLXRocm93aW5nIHRoZSBleGNl
cHRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDU1MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGZhc3QvZG9tL3JlZ3Jlc3MtMTMxNTMwLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgLSBSZWJhc2Vk
IHJlc3VsdHMgYmVjYXVzZSB3ZSBub3cgaGF2ZSBhIHByb3BlciBsaW5lIG51bWJlci4KKworICAg
ICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb25zLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlv
bnMuaHRtbDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL3Jlc291cmNlcy9i
cmVhay1vbi1leGNlcHRpb25zLmpzOiBBZGRlZC4KKyAgICAgICAgKHdpbmRvdy5vbmVycm9yKToK
KyAgICAgICAgKGZvbyk6CisgICAgICAgICh0ZXN0RXhjZXB0aW9ucyk6CisgICAgICAgICh0ZXN0
UHJvbWlzZXMpOgorCisgICAgICAgICogcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnM6Cisg
ICAgICAgIC0gVGhlIG5ldyB0ZXN0IG5lZWRzIHRvIGJlIHNraXBwZWQgYmVjYXVzZSBpdCBtYXkg
Y3VycmVudCBmYWlsIG9uIFdLMiBkdWUgdG8KKyAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1NjI2LgorCiAyMDE1LTA2LTAzICBTYWlkIEFib3UtSGFs
bGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgU2tpcCB3ZWJnbC91c2VX
aGlsZVBlbmRpbmcuaHRtbCBvbiBXZWJLaXQgMSBmb2xsb3dpbmc6CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9yZWdyZXNzLTEzMTUzMC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9kb20vcmVncmVzcy0xMzE1MzAtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAx
ODUxODEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZWdyZXNzLTEzMTUzMC1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiBDT05TT0xFIE1FU1NBR0U6IGxpbmUg
NTogRXhjZXB0aW9uIHRvIHRyaWdnZXIgdW53aW5kaW5nIGluIE11dGF0aW9uT2JzZXJ2ZXIKLUNP
TlNPTEUgTUVTU0FHRTogUGVuZGluZyBleGNlcHRpb24gYmVmb3JlIE11dGF0aW9uT2JzZXJ2ZXJz
IGFyZSBjYWxsZWQuCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMjI6IFBlbmRpbmcgZXhjZXB0aW9u
IGJlZm9yZSBNdXRhdGlvbk9ic2VydmVycyBhcmUgY2FsbGVkLgogUmVncmVzc2lvbiB0ZXN0IGZv
ciBodHRwczovL3dlYmtpdC5vcmcvYi8xMzE1MzAuIFRoaXMgdGVzdCBzaG91bGQgbm90IGNyYXNo
LgogCiBNdXRhdGUgdGhhdCBub2RlCkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdn
ZXIvYnJlYWstb24tZXhjZXB0aW9ucy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbnMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9u
LWV4Y2VwdGlvbnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAK
K0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBQYXNzIDE6IHRlc3RFeGNlcHRpb25zIHdpdGggYnJl
YWsgb24gYWxsIGV4Y2VwdGlvbnMKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA3OiBmb286IHRyeQor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDk6IGZvbzogZm9yLi4ub2Y6IGkgPSAxCitDT05TT0xFIE1F
U1NBR0U6IGxpbmUgMTE6IGZvbzogdGhyb3cgIlRlc3RFcnJvciIKK0NPTlNPTEUgTUVTU0FHRTog
bGluZSAxNjogZm9vOiBjYXRjaCBUZXN0RXJyb3IKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOTog
Zm9vOiBmaW5hbGx5CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMjogV2luZG93Lm9uZXJyb3I6IFRl
c3RFcnJvcgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE3OiBUZXN0RXJyb3IKK0NPTlNPTEUgTUVT
U0FHRTogbGluZSAxOiBQYXNzIDI6IHRlc3RQcm9taXNlcyB3aXRoIGJyZWFrIG9uIGFsbCBleGNl
cHRpb25zCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMzY6IFByb21pc2U6IHRoZW4KK0NPTlNPTEUg
TUVTU0FHRTogbGluZSA3OiBmb286IHRyeQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDk6IGZvbzog
Zm9yLi4ub2Y6IGkgPSAxCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTE6IGZvbzogdGhyb3cgIlRl
c3RFcnJvciIKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxNjogZm9vOiBjYXRjaCBUZXN0RXJyb3IK
K0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOTogZm9vOiBmaW5hbGx5CitDT05TT0xFIE1FU1NBR0U6
IGxpbmUgMzk6IFByb21pc2U6IGNhdGNoIFRlc3RFcnJvcgorQ09OU09MRSBNRVNTQUdFOiBsaW5l
IDE6IFBhc3MgMzogdGVzdEV4Y2VwdGlvbnMgd2l0aCBicmVhayBvbiB1bmNhdWdodCBleGNlcHRp
b25zCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNzogZm9vOiB0cnkKK0NPTlNPTEUgTUVTU0FHRTog
bGluZSA5OiBmb286IGZvci4uLm9mOiBpID0gMQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDExOiBm
b286IHRocm93ICJUZXN0RXJyb3IiCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTY6IGZvbzogY2F0
Y2ggVGVzdEVycm9yCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTk6IGZvbzogZmluYWxseQorQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDI6IFdpbmRvdy5vbmVycm9yOiBUZXN0RXJyb3IKK0NPTlNPTEUg
TUVTU0FHRTogbGluZSAxNzogVGVzdEVycm9yCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogUGFz
cyA0OiB0ZXN0UHJvbWlzZXMgd2l0aCBicmVhayBvbiB1bmNhdWdodCBleGNlcHRpb25zCitDT05T
T0xFIE1FU1NBR0U6IGxpbmUgMzY6IFByb21pc2U6IHRoZW4KK0NPTlNPTEUgTUVTU0FHRTogbGlu
ZSA3OiBmb286IHRyeQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDk6IGZvbzogZm9yLi4ub2Y6IGkg
PSAxCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTE6IGZvbzogdGhyb3cgIlRlc3RFcnJvciIKK0NP
TlNPTEUgTUVTU0FHRTogbGluZSAxNjogZm9vOiBjYXRjaCBUZXN0RXJyb3IKK0NPTlNPTEUgTUVT
U0FHRTogbGluZSAxOTogZm9vOiBmaW5hbGx5CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMzk6IFBy
b21pc2U6IGNhdGNoIFRlc3RFcnJvcgorVGVzdCB0aGF0IHBhdXNpbmcgaW4gZGlmZmVyZW50IHdh
eXMgdHJpZ2dlcnMgZGlmZmVyZW50IHBhdXNlIHJlYXNvbnMuCisKK1Bhc3MgMTogdGVzdEV4Y2Vw
dGlvbnMgd2l0aCBicmVhayBvbiBhbGwgZXhjZXB0aW9ucworUEFVU0UgIzEKKyAgICBQQVVTRUQg
QVQ6IGZvbzoxMTozMworUEFVU0UgIzIKKyAgICBQQVVTRUQgQVQ6IGZvbzoxNjoxNQorUkVTVU1F
RAorCitQYXNzIDI6IHRlc3RQcm9taXNlcyB3aXRoIGJyZWFrIG9uIGFsbCBleGNlcHRpb25zCitQ
QVVTRSAjMworICAgIFBBVVNFRCBBVDogZm9vOjExOjMzCitQQVVTRSAjNAorICAgIFBBVVNFRCBB
VDogZm9vOjE2OjE1CitQQVVTRSAjNQorICAgIFBBVVNFRCBBVDogcHJvbWlzZUNhdGNoOjM5OjE1
CitSRVNVTUVECisKK1Bhc3MgMzogdGVzdEV4Y2VwdGlvbnMgd2l0aCBicmVhayBvbiB1bmNhdWdo
dCBleGNlcHRpb25zCitQQVVTRSAjNgorICAgIFBBVVNFRCBBVDogZm9vOjE2OjE1CitSRVNVTUVE
CisKK1Bhc3MgNDogdGVzdFByb21pc2VzIHdpdGggYnJlYWsgb24gdW5jYXVnaHQgZXhjZXB0aW9u
cworUEFVU0UgIzcKKyAgICBQQVVTRUQgQVQ6IGZvbzoxNjoxNQorUEFVU0UgIzgKKyAgICBQQVVT
RUQgQVQ6IHByb21pc2VDYXRjaDozOToxNQorUkVTVU1FRAorCisKSW5kZXg6IExheW91dFRlc3Rz
L2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb25zLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbnMuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1v
bi1leGNlcHRpb25zLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKzwhZG9j
dHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vcmVzb3VyY2VzL2Jy
ZWFrLW9uLWV4Y2VwdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRlc3Qo
KQoreworICAgIHZhciBwYXVzZXMgPSAwOworICAgIHZhciBpbmRleCA9IDA7CisKKyAgICBmdW5j
dGlvbiBlbmFibGVCcmVha09uQWxsRXhjZXB0aW9ucygpIHsKKyAgICAgICAgV2ViSW5zcGVjdG9y
LmRlYnVnZ2VyTWFuYWdlci5hbGxFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNhYmxlZCA9IGZhbHNl
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGRpc2FibGVCcmVha09uQWxsRXhjZXB0aW9ucygpIHsK
KyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hbGxFeGNlcHRpb25zQnJlYWtw
b2ludC5kaXNhYmxlZCA9IHRydWU7CisgICAgfQorCisgICAgZnVuY3Rpb24gZW5hYmxlQnJlYWtP
blVuY2F1Z2h0RXhjZXB0aW9ucygpIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFu
YWdlci5hbGxVbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gZGlzYWJsZUJyZWFrT25VbmNhdWdodEV4Y2VwdGlvbnMoKSB7
CisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWxsVW5jYXVnaHRFeGNlcHRp
b25zQnJlYWtwb2ludC5kaXNhYmxlZCA9IHRydWU7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGl0
bGUoc3RyKSB7CisgICAgICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoInNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKCciICsgc3RyICsgIicpOyB9LCAwKSIpOworICAg
ICAgICBJbnNwZWN0b3JUZXN0LmxvZyhzdHIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRl
c3RDYXNlKHRlc3QpIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluUGFnZSgic2V0
VGltZW91dCgiICsgdGVzdCArICIsIDApIik7CisgICAgfQorCisgICAgdmFyIHNjZW5hcmlvcyA9
IFsKKyAgICAgICAgLy8gUGFzcyAxCisgICAgICAgIHsgZXhwcmVzc2lvbjogLy8gU2hvdWxkIHBh
dXNlIGF0IFRocm93IFBvaW50IDEuCisgICAgICAgICAgICAiZW5hYmxlQnJlYWtPbkFsbEV4Y2Vw
dGlvbnMoKTsiICsKKyAgICAgICAgICAgICJ0aXRsZSgnUGFzcyAxOiB0ZXN0RXhjZXB0aW9ucyB3
aXRoIGJyZWFrIG9uIGFsbCBleGNlcHRpb25zJyk7IiArCisgICAgICAgICAgICAicnVuVGVzdENh
c2UoJ3Rlc3RFeGNlcHRpb25zJyk7IgorICAgICAgICB9LAorCisgICAgICAgIC8vIFBhc3MgMjoK
KyAgICAgICAgeyBleHByZXNzaW9uOiAvLyBTaG91bGQgcGF1c2UgYXQgVGhyb3cgUG9pbnQgMS4K
KyAgICAgICAgICAgICJ0aXRsZSgnUGFzcyAyOiB0ZXN0UHJvbWlzZXMgd2l0aCBicmVhayBvbiBh
bGwgZXhjZXB0aW9ucycpOyIgKworICAgICAgICAgICAgInJ1blRlc3RDYXNlKCd0ZXN0UHJvbWlz
ZXMnKTsiCisgICAgICAgIH0sCisKKyAgICAgICAgLy8gUGFzcyAzCisgICAgICAgIHsgZXhwcmVz
c2lvbjogLy8gU2hvdWxkIHBhdXNlIGF0IFRocm93IFBvaW50IDIuCisgICAgICAgICAgICAiZGlz
YWJsZUJyZWFrT25BbGxFeGNlcHRpb25zKCk7ICIgKworICAgICAgICAgICAgImVuYWJsZUJyZWFr
T25VbmNhdWdodEV4Y2VwdGlvbnMoKTsgIiArCisgICAgICAgICAgICAidGl0bGUoJ1Bhc3MgMzog
dGVzdEV4Y2VwdGlvbnMgd2l0aCBicmVhayBvbiB1bmNhdWdodCBleGNlcHRpb25zJyk7IiArCisg
ICAgICAgICAgICAicnVuVGVzdENhc2UoJ3Rlc3RFeGNlcHRpb25zJyk7IgorICAgICAgICB9LAor
CisgICAgICAgIC8vIFBhc3MgNAorICAgICAgICB7IGV4cHJlc3Npb246CisgICAgICAgICAgICAi
dGl0bGUoJ1Bhc3MgNDogdGVzdFByb21pc2VzIHdpdGggYnJlYWsgb24gdW5jYXVnaHQgZXhjZXB0
aW9ucycpOyIgKworICAgICAgICAgICAgInJ1blRlc3RDYXNlKCd0ZXN0UHJvbWlzZXMnKTsiCisg
ICAgICAgIH0sCisgICAgXTsKKworICAgIGZ1bmN0aW9uIG5leHRTY2VuYXJpbygpCisgICAgewor
ICAgICAgICB2YXIgc2NlbmFyaW8gPSBzY2VuYXJpb3NbaW5kZXgrK107CisgICAgICAgIGlmICgh
c2NlbmFyaW8pIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNjZW5hcmlvLmV4cHJl
c3Npb24pCisgICAgICAgICAgICBldmFsKHNjZW5hcmlvLmV4cHJlc3Npb24pOworICAgIH0KKwor
ICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlNjcmlwdEFkZGVkLCBmdW5jdGlvbihldmVudCkg
eworICAgICAgICB2YXIgc2NyaXB0T2JqZWN0ID0gZXZlbnQuZGF0YS5zY3JpcHQ7CisgICAgICAg
IGlmICghL2JyZWFrLW9uLWV4Y2VwdGlvbnNcLmpzJC8udGVzdChzY3JpcHRPYmplY3QudXJsKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbmV4dFNjZW5hcmlvKCk7CisgICAgfSk7CisK
KyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5DYWxsRnJhbWVzRGlkQ2hhbmdlLCBmdW5jdGlv
bihldmVudCkgeworICAgICAgICB2YXIgY2FsbEZyYW1lID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TWFuYWdlci5hY3RpdmVDYWxsRnJhbWU7CisgICAgICAgIGlmIChjYWxsRnJhbWUpIHsKKyAgICAg
ICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQQVVTRSAjIiArICgrK3BhdXNlcykpOworICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQoV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5w
YXVzZVJlYXNvbiA9PSAiZXhjZXB0aW9uIik7CisKKyAgICAgICAgICAgIHZhciBmdW5jTmFtZSA9
IGNhbGxGcmFtZS5mdW5jdGlvbk5hbWUgfHwgIjxhbm9ueW1vdXM+IjsKKyAgICAgICAgICAgIHZh
ciBsb2NhdGlvbiA9IGNhbGxGcmFtZS5zb3VyY2VDb2RlTG9jYXRpb247CisgICAgICAgICAgICB2
YXIgbGluZSA9IGxvY2F0aW9uLmxpbmVOdW1iZXI7CisgICAgICAgICAgICB2YXIgY29sdW1uID0g
bG9jYXRpb24uY29sdW1uTnVtYmVyOworCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygi
ICAgIFBBVVNFRCBBVDogIiArIGZ1bmNOYW1lICsgIjoiICsgbGluZSArICI6IiArIGNvbHVtbik7
CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnJlc3VtZSgpOworCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUkVTVU1FRCIp
OworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIiIpOworICAgICAgICAgICAgbmV4dFNj
ZW5hcmlvKCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIEluc3BlY3RvclRlc3QucmVsb2Fk
UGFnZSgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+
CisgICAgPHA+VGVzdCB0aGF0IHBhdXNpbmcgaW4gZGlmZmVyZW50IHdheXMgdHJpZ2dlcnMgZGlm
ZmVyZW50IHBhdXNlIHJlYXNvbnMuPC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3Jlc291cmNlcy9icmVhay1vbi1leGNlcHRpb25zLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9yZXNvdXJjZXMv
YnJlYWstb24tZXhjZXB0aW9ucy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2luc3Bl
Y3Rvci9kZWJ1Z2dlci9yZXNvdXJjZXMvYnJlYWstb24tZXhjZXB0aW9ucy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQyIEBACit3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKGUpeworICAg
IGNvbnNvbGUubG9nKCJXaW5kb3cub25lcnJvcjogIiArIGUpOworfTsKKworZnVuY3Rpb24gZm9v
KGFycikgeworICAgIHRyeSB7CisgICAgICAgIGNvbnNvbGUubG9nKCJmb286IHRyeSIpOworICAg
ICAgICBmb3IgKGkgb2YgYXJyKSB7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiZm9vOiBmb3Iu
Li5vZjogaSA9ICIgKyBpKTsKKyAgICAgICAgICAgIGlmIChpID49IDEpIHsKKyAgICAgICAgICAg
ICAgICBjb25zb2xlLmxvZygnZm9vOiB0aHJvdyAiVGVzdEVycm9yIicpOworICAgICAgICAgICAg
ICAgIHRocm93ICJUZXN0RXJyb3IiOyAvLyBUaHJvdyBwb2ludCAxLgorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBjb25zb2xlLmxvZygiZm9vOiBj
YXRjaCAiICsgZSk7CisgICAgICAgIHRocm93IGU7IC8vIFRocm93IHBvaW50IDIuCisgICAgfSBm
aW5hbGx5IHsKKyAgICAgICAgY29uc29sZS5sb2coImZvbzogZmluYWxseSIpOworICAgIH0KKyAg
ICByZXR1cm4gNTsKK30KKwordmFyIGlubmVyID0gWyAxLCAyLCAzIF07Cit2YXIgb3V0ZXIgPSBb
WyAia2V5IiwgaW5uZXIgXV07CisKK2Z1bmN0aW9uIHRlc3RFeGNlcHRpb25zKCkgeworICAgIHZh
ciBvID0gb3V0ZXI7CisgICAgKG5ldyBNYXAobykpLmZvckVhY2goZm9vKTsKK30KKworZnVuY3Rp
b24gdGVzdFByb21pc2VzKCkgeworICAgIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2UocmVz
b2x2ZSwgcmVqZWN0KSB7CisgICAgICAgIHJlc29sdmUob3V0ZXIpOworICAgIH0pLnRoZW4oZnVu
Y3Rpb24gcHJvbWlzZVRoZW4oeCkgeworICAgICAgICBjb25zb2xlLmxvZygiUHJvbWlzZTogdGhl
biIpOworICAgICAgICB0ZXN0RXhjZXB0aW9ucyh4KTsKKyAgICB9KS5jYXRjaChmdW5jdGlvbiBw
cm9taXNlQ2F0Y2goZSkgeworICAgICAgICBjb25zb2xlLmxvZygiUHJvbWlzZTogY2F0Y2ggIiAr
IGUpOworICAgICAgICB0aHJvdyBlOyAvLyBUaHJvdyBwb2ludCAzLgorICAgIH0pOworfQpJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlzaW9uIDE4
NTE4MSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjAsNiArMjIwLDggQEAgd2Via2l0Lm9yZy9iLzk4MzQ1IGZhc3QvcGFy
c2VyL2RvY3VtZW50LQogCiB3ZWJraXQub3JnL2IvMTQxMTIyIGVkaXRpbmcvc2VsZWN0aW9uL3By
b2dyYW1tYXRpYy1zZWxlY3Rpb24tb24tbWFjLWlzLWRpcmVjdGlvbmxlc3MuaHRtbCBbIFBhc3Mg
RmFpbHVyZSBdCiAKK3dlYmtpdC5vcmcvYi8xNDU2MjYgaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFr
LW9uLWV4Y2VwdGlvbnMuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCisKICMjIyBFTkQgT0YgKDEpIENs
YXNzaWZpZWQgZmFpbHVyZXMgd2l0aCBidWcgcmVwb3J0cwogIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIwogCg==
</data>
<flag name="review"
          id="279241"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254367</attachid>
            <date>2015-06-05 11:15:10 -0700</date>
            <delta_ts>2015-06-05 11:15:10 -0700</delta_ts>
            <desc>patch for landing with fixes applied.</desc>
            <filename>bug-145525b.patch</filename>
            <type>text/plain</type>
            <size>251382</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzMSBA
QAorMjAxNS0wNi0wNSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
ZmluYWxseSBibG9ja3Mgc2hvdWxkIG5vdCBzZXQgdGhlIGV4Y2VwdGlvbiBzdGFjayB0cmFjZSB3
aGVuIHJlLXRocm93aW5nIHRoZSBleGNlcHRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1MjUKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9m
ZnJleSBHYXJlbi4KKworICAgICAgICBIb3cgZXhjZXB0aW9ucyBwcmVzZW50bHkgd29yazoKKyAg
ICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgMS4gb3BfdGhyb3cg
Y2FuIHRocm93IGFueSBKU1ZhbHVlLgorICAgICAgICAyLiB0aGUgVk0gdHJpZXMgdG8gY2FwdHVy
ZSB0aGUgc3RhY2sgYXQgdGhlIHRocm93IHBvaW50IGFuZCBwcm9wYWdhdGUgdGhhdCBhcyBuZWVk
ZWQuCisgICAgICAgIDMuIGZpbmFsbHkgYmxvY2tzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBvcF9j
YXRjaCB0byBjYXRjaCB0aGUgdGhyb3duIHZhbHVlLCBhbmQgdGhyb3dzIGl0IGFnYWluIHVzaW5n
IG9wX3Rocm93LgorCisgICAgICAgIFdoYXQncyB3cm9uZyB3aXRoIGhvdyBpdCBwcmVzZW50bHkg
d29ya3M6CisgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
KyAgICAgICAgMS4gZmluYWxseSdzIG1ha2VzIGZvciBiYWQgZXhjZXB0aW9uIHRocm93IGxpbmUg
bnVtYmVycyBpbiB0aGUgSW5zcGVjdG9yIGNvbnNvbGUuCisKKyAgICAgICAgICAgVGhlIG9wX3Ro
cm93IGluIGZpbmFsbHkgd2lsbCB0aHJvdyB0aGUgdmFsdWUgYW5ldyBpLmUuIGl0IGNhcHR1cmVz
IGEgc3RhY2sgZnJvbSB0aGUgcmUtdGhyb3cgcG9pbnQuCisgICAgICAgICAgIEFzIGEgcmVzdWx0
LCB0aGUgSW5zcGVjdG9yIHNlZXMgdGhlIGZpbmFsbHkgYmxvY2sgYXMgdGhlIHRocm93IHBvaW50
LiAgVGhlIG9yaWdpbmFsIHN0YWNrIGlzIGxvc3QuCisKKyAgICAgICAgMi4gZmluYWxseSdzIGJy
ZWFrcyB0aGUgSW5zcGVjdG9yJ3MgIkJyZWFrcyBvbiBVbmNhdWdodCBFeGNlcHRpb24iCisKKyAg
ICAgICAgICAgVGhpcyBpcyBiZWNhdXNlIGZpbmFsbHkgYmxvY2tzIGFyZSBpbmRpc3Rpbmd1aXNo
YWJsZSBmcm9tIGNhdGNoIGJsb2Nrcy4gIEFzIGEgcmVzdWx0LCBhIHRyeS1maW5hbGx5LAorICAg
ICAgICAgICB3aGljaCBzaG91bGQgYnJlYWsgaW4gdGhlIEluc3BlY3RvciBvbiB0aGUgdGhyb3cs
IGRvZXMgbm90IGJlY2F1c2UgdGhlIEluc3BlY3RvciB0aG91Z2h0IHRoZQorICAgICAgICAgICBl
eGNlcHRpb24gd2FzICJjYXVnaHQiLgorCisgICAgICAgIDMuIGZpbmFsbHkncyB5aWVsZHMgY29u
ZnVzaW5nIGJyZWFrIHBvaW50cyB3aGVuIHRoZSBJbnNwZWN0b3IgIkJyZWFrcyBvbiBBbGwgRXhj
ZXB0aW9ucyIKKworICAgICAgICAgICBhLiBJbiBhIHRyeS1maW5hbGx5IHNjZW5hcmlvLCB0aGUg
SW5zcGVjdG9yIGJyZWFrcyAyIHRpbWVzOiAxIGF0IHRoZSB0aHJvdywgMSBhdCB0aGUgZmluYWxs
eS4KKyAgICAgICAgICAgYi4gSW4gYSBmb3Itb2YgbG9vcCAod2hpY2ggaGFzIHN5bnRoZXNpemVk
IGZpbmFsbHlzKSwgdGhlIEluc3BlY3RvciB3aWxsIGRvIGFub3RoZXIgYnJlYWsuCisgICAgICAg
ICAgICAgIFNpbWlsYXJseSBmb3Igb3RoZXIgY2FzZXMgb2YgSlMgY29kZSB3aGljaCBzeW50aGVz
aXplIGZpbmFsbHlzLgorICAgICAgICAgICBjLiBBdCBWTSByZS1lbnRyeSBib3VuZGFyaWVzIChl
LmcuIGpzIHRocm93cyAmIHJldHVybnMgdG8gbmF0aXZlIGNvZGUsIHdoaWNoIHJldHVybnMgdG8g
anMpLAorICAgICAgICAgICAgICB0aGUgSW5zcGVjdG9yIHdpbGwgZG8gYW5vdGhlciBicmVhayBp
ZiB0aGVyZSdzIGFuIHVuY2F1Z2h0IGV4Y2VwdGlvbi4KKworICAgICAgICBIb3cgdGhpcyBwYXRj
aCBmaXhlcyB0aGUgaXNzdWVzOgorICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CisgICAgICAgIDEuIFdlIGludHJvZHVjZSBhbiBFeGNlcHRpb24gb2JqZWN0IHRoYXQgd3Jh
cHMgdGhlIHRocm93biB2YWx1ZSBhbmQgdGhlIGV4Y2VwdGlvbiBzdGFjay4KKworICAgICAgICAg
ICBXaGVuIHRocm93aW5nIGFuIGV4Y2VwdGlvbiwgdGhlIFZNIHdpbGwgY2hlY2sgaWYgdGhlIHRo
cm93biB2YWx1ZSBpcyBhbiBFeGNlcHRpb24KKyAgICAgICAgICAgb2JqZWN0IG9yIG5vdC4gIElm
IGl0IGlzIG5vdCBhbiBFeGNlcHRpb24gb2JqZWN0LCB0aGVuIHdlIG11c3QgYmUgdGhyb3dpbmcg
YSBuZXcKKyAgICAgICAgICAgZXhjZXB0aW9uLiAgVGhlIFZNIHdpbGwgY3JlYXRlIGFuIEV4Y2Vw
dGlvbiBvYmplY3QgdG8gd3JhcCB0aGUgdGhyb3duIHZhbHVlIGFuZAorICAgICAgICAgICBjYXB0
dXJlIHRoZSBjdXJyZW50IHN0YWNrIGZvciBpdC4KKworICAgICAgICAgICBJZiB0aGUgdGhyb3du
IHZhbHVlIGlzIGFscmVhZHkgYW4gRXhjZXB0aW9uIG9iamVjdCwgdGhlbiB0aGUgcmVxdWVzdGVk
IHRocm93IG9wZXJhdGlvbgorICAgICAgICAgICBtdXN0IGJlIGEgcmUtdGhyb3cuICBUaGUgVk0g
d2lsbCBub3QgY2FwdHVyZSBhIG5ldyBzdGFjayBmb3IgaXQuCisKKyAgICAgICAgMi4gb3BfY2F0
Y2ggd2lsbCBub3cgcG9wdWxhdGUgMiBsb2NhbHM6IDEgZm9yIHRoZSBFeGNlcHRpb24sIDEgZm9y
IHRoZSB0aHJvd24gSlNWYWx1ZS4KKworICAgICAgICAgICBUaGUgVk0gaXMgYXdhcmUgb2YgdGhl
IEV4Y2VwdGlvbiBvYmplY3QgYW5kIHVzZXMgaXQgZm9yIHJldGhyb3dzIGluIGZpbmFsbHkgYmxv
Y2tzLgorICAgICAgICAgICBKUyBzb3VyY2UgY29kZSBpcyBuZXZlciBhd2FyZSBvZiB0aGUgRXhj
ZXB0aW9uIG9iamVjdC4KKworICAgICAgICAgICBKUyBjb2RlIGlzIGF3YXJlIG9mIHRoZSB0aHJv
d24gdmFsdWUuICBJZiBpdCB0aHJvd3MgdGhlIGNhdWdodCB0aHJvd24gdmFsdWUsIHRoYXQKKyAg
ICAgICAgICAgY29uc3RpdHV0ZXMgYSBuZXcgdGhyb3csIGFuZCBhIG5ldyBFeGNlcHRpb24gb2Jq
ZWN0IHdpbGwgYmUgY3JlYXRlZCBmb3IgaXQuCisKKyAgICAgICAgMy4gVGhlIFZNIG5vIGxvbmdl
ciB0cmFja3MgdGhlIHRocm93biBKU1ZhbHVlIGFuZCB0aGUgZXhjZXB0aW9uIHN0YWNrLiAgSXQg
d2lsbCBvbmx5CisgICAgICAgICAgIHRyYWNrIGEgbV9leGNlcHRpb24gZmllbGQgd2hpY2ggaXMg
YW4gRXhjZXB0aW9uKi4KKworICAgICAgICA0LiBUaGUgQnl0ZWNvZGVHZW5lcmF0b3IgaGFzIGFs
cmVhZHkgYmVlbiB1cGRhdGVkIGluIGEgcHJpb3IgcGF0Y2ggdG8gZGlzdGluZ3Vpc2gKKyAgICAg
ICAgICAgYmV0d2VlbiBDYXRjaCwgRmluYWxseSwgYW5kIFN5bnRoZXNpemVkRmluYWxseSBibG9j
a3MuICBUaGUgaW50ZXJwcmV0ZXIgcnVudGltZSB3aWxsCisgICAgICAgICAgIG5vdyByZXBvcnQg
dG8gdGhlIGRlYnVnZ2VyIHdoZXRoZXIgd2UgaGF2ZSBhIENhdGNoIGhhbmRsZXIsIG5vdCBqdXN0
IGFueSBoYW5kbGVycy4KKworICAgICAgICAgICBUaGUgZGVidWdnZXIgd2lsbCB1c2UgdGhpcyBk
ZXRhaWwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gYnJlYWsgb3Igbm90LiAgIkJyZWFrIG9uCisg
ICAgICAgICAgIHVuY2F1Z2h0IGV4Y2VwdGlvbnMiIHdpbGwgb25seSBicmVhayBpZiBubyBDYXRj
aCBoYW5kbGVyIHdhcyBmb3VuZC4KKworICAgICAgICAgICBUaGlzIHNvbHZlcyB0aGUgaXNzdWUg
b2YgdGhlIGRlYnVnZ2VyIGJyZWFraW5nIGF0IGZpbmFsbHkgYmxvY2tzLCBhbmQgZm9yLW9mIHN0
YXRlbWVudHMuCisKKyAgICAgICAgNS4gVGhlIEV4Y2VwdGlvbiBvYmplY3Qgd2lsbCBhbHNvIGhh
dmUgYSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGRlYnVnZ2VyIGhhcyBiZWVuCisgICAg
ICAgICAgIG5vdGlmaWVkIG9mIHRoZSBFeGNlcHRpb24gYmVpbmcgdGhyb3duLiAgT25jZSB0aGUg
SW50ZXJwcmV0ZXIgbm90aWZpZXMgdGhlIGRlYnVnZ2VyCisgICAgICAgICAgIG9mIHRoZSBFeGNl
cHRpb24gb2JqZWN0LCBpdCB3aWxsIG1hcmsgdGhpcyBmbGFnIGFuZCBub3QgcmVwZWF0IHRoZSBu
b3RpZnkgdGhlIGRlYnVnZ2VyCisgICAgICAgICAgIGFnYWluIG9mIHRoZSBzYW1lIEV4Y2VwdGlv
bi4KKworICAgICAgICAgICBUaGlzIHNvbHZlcyB0aGUgaXNzdWUgb2YgdGhlIGRlYnVnZ2VyIGJy
ZWFraW5nIGF0IFZNIHJlLWVudHJ5IHBvaW50cyBkdWUgdG8gdW5jYXVnaHQKKyAgICAgICAgICAg
ZXhjZXB0aW9ucy4KKworICAgICAgICA2LiBUaGUgbGlmZS1jeWNsZSBvZiB0aGUgY2FwdHVyZWQg
ZXhjZXB0aW9uIHN0YWNrIHRyYWNlIHdpbGwgbm93IGZvbGxvdyB0aGUgbGlmZS1jeWNsZQorICAg
ICAgICAgICBvZiB0aGUgRXhjZXB0aW9uIG9iamVjdC4KKworICAgICAgICBPdGhlciBjaGFuZ2Vz
OgorICAgICAgICA3LiBDaGFuZ2UgYWxsIGNsaWVudHMgb2YgdGhlIFZNOjpleGNlcHRpb24oKSB0
byBleHBlY3QgYW4gRXhjZXB0aW9uKiBpbnN0ZWFkIG9mIEpTVmFsdWUuCisKKyAgICAgICAgOC4g
Rml4ZWQgYSBmZXcgYnVncyB3aGVyZSB0aHJvd24gZXhjZXB0aW9ucyBhcmUgbm90IGNsZWFyZWQg
YmVmb3JlIGV4aXRpbmcgdGhlIFZNLgorCisgICAgICAgIDkuIEFsc28gcmVuYW1lZCBzb21lIHZh
cmlhYmxlcyBhbmQgY2xhc3NlcyB0byBiZXR0ZXIgZGVzY3JpYmUgd2hhdCB0aGV5IGFyZS4KKwor
ICAgICAgICAqIEFQSS9KU0Jhc2UuY3BwOgorICAgICAgICAoSlNFdmFsdWF0ZVNjcmlwdCk6Cisg
ICAgICAgIChKU0NoZWNrU2NyaXB0U3ludGF4KToKKworICAgICAgICAqIEFQSS9KU09iamVjdFJl
Zi5jcHA6CisgICAgICAgIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZCk6CisgICAgICAgIC0gVGhl
IGZ1bmN0aW9ucyBiZWxvdyBhbGwgZG8gdGhlIHNhbWUgZXhjZXB0aW9uIGNoZWNrLiAgQWRkZWQg
dGhpcyBoZWxwZXIKKyAgICAgICAgICB0byBzaW1wbGlmeSB0aGUgY29kZS4KKyAgICAgICAgKEpT
Q2xhc3NDcmVhdGUpOgorICAgICAgICAoSlNPYmplY3RNYWtlRnVuY3Rpb24pOgorICAgICAgICAo
SlNPYmplY3RNYWtlQXJyYXkpOgorICAgICAgICAoSlNPYmplY3RNYWtlRGF0ZSk6CisgICAgICAg
IChKU09iamVjdE1ha2VFcnJvcik6CisgICAgICAgIChKU09iamVjdE1ha2VSZWdFeHApOgorICAg
ICAgICAoSlNPYmplY3RHZXRQcm9wZXJ0eSk6CisgICAgICAgIChKU09iamVjdFNldFByb3BlcnR5
KToKKyAgICAgICAgKEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KToKKyAgICAgICAgKEpTT2Jq
ZWN0U2V0UHJvcGVydHlBdEluZGV4KToKKyAgICAgICAgKEpTT2JqZWN0RGVsZXRlUHJvcGVydHkp
OgorICAgICAgICAoSlNPYmplY3RDYWxsQXNGdW5jdGlvbik6CisgICAgICAgIChKU09iamVjdENh
bGxBc0NvbnN0cnVjdG9yKToKKworICAgICAgICAqIEFQSS9KU1NjcmlwdFJlZi5jcHA6CisgICAg
ICAgICogQVBJL0pTVmFsdWUubW06CisgICAgICAgIChKU0NvbnRhaW5lckNvbnZlcnRvcjo6dGFr
ZSk6CisgICAgICAgIChyZXBvcnRFeGNlcHRpb25Ub0luc3BlY3Rvcik6CisKKyAgICAgICAgKiBB
UEkvSlNWYWx1ZVJlZi5jcHA6CisgICAgICAgIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZCk6Cisg
ICAgICAgIC0gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhbGwgZG8gdGhlIHNhbWUgZXhjZXB0aW9uIGNo
ZWNrLiAgQWRkZWQgdGhpcyBoZWxwZXIKKyAgICAgICAgICB0byBzaW1wbGlmeSB0aGUgY29kZS4K
KyAgICAgICAgKGV2ZXJub3RlSGFja05lZWRlZCk6CisgICAgICAgIChKU1ZhbHVlSXNFcXVhbCk6
CisgICAgICAgIChKU1ZhbHVlSXNJbnN0YW5jZU9mQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNW
YWx1ZUNyZWF0ZUpTT05TdHJpbmcpOgorICAgICAgICAoSlNWYWx1ZVRvTnVtYmVyKToKKyAgICAg
ICAgKEpTVmFsdWVUb1N0cmluZ0NvcHkpOgorICAgICAgICAoSlNWYWx1ZVRvT2JqZWN0KToKKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAtIEFkZGVkIG5ldyBmaWxl
cyBFeGNlcHRpb24uaCBhbmQgRXhjZXB0aW9uLmNwcC4KKworICAgICAgICAqIGJpbmRpbmdzL1Nj
cmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAgICAgIChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlv
bkNhbGw6OmNhbGwpOgorICAgICAgICAqIGJpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oOgor
CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb246CisgICAgICAgIC0gb3BfY2F0
Y2ggbm93IGhhZCAyIG9wZXJhbmRzOiB0aGUgZXhjZXB0aW9uIHJlZ2lzdGVyLCBhbmQgdGhlIHRo
cm93biB2YWx1ZSByZWdpc3Rlci4KKworICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlVXNlRGVm
Lmg6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVt
cEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvZGVP
ZmZzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAtIGhhbmRs
ZXJGb3JCeXRlY29kZU9mZnNldCgpIG5vdyBjYW4gbG9vayBmb3IganVzdCBDYXRjaCBoYW5kbGVy
cyBvbmx5LgorCisgICAgICAgICogYnl0ZWNvZGUvSGFuZGxlckluZm8uaDoKKyAgICAgICAgLSBD
bGVhbmVkIHVwIHNvbWUgd2hpdGUgc3BhY2UgSSBhY2NpZGVudGFsbHkgYWRkZWQgaW4gYSBwcmV2
aW91cyBwYXRjaC4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoVHJ5KToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFRyeUFuZEVtaXRDYXRjaCk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dSZWZlcmVuY2VFcnJvcik6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24pOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFRocm93KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcDoKKyAgICAgICAgKEpTQzo6VHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgLSBB
ZGRpbmcgc3VwcG9ydCBmb3Igb3BfY2F0Y2gncyAyIG9wZXJhbmRzLgorCisgICAgICAgICogZGVi
dWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6aGFzQnJlYWtwb2lu
dCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKToKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXI6OmV4Y2VwdGlvbik6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuaDoK
KyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6
OkRlYnVnZ2VyQ2FsbEZyYW1lOjp0aGlzVmFsdWUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNh
bGxGcmFtZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1l
Lmg6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjppc1ZhbGlkKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rv
cjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVJbmplY3RlZFNjcmlwdCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckVudmlyb25tZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChJbnNwZWN0
b3I6OkpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6YXBwZW5kQVBJQmFja3RyYWNl
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVy
OjpyZXBvcnRBUElFeGNlcHRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9KU0dsb2JhbE9iamVj
dEluc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNHbG9iYWxPYmpl
Y3RTY3JpcHREZWJ1Z1NlcnZlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9KU0phdmFTY3JpcHRD
YWxsRnJhbWUuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6
OmV2YWx1YXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oOgor
ICAgICAgICAoSW5zcGVjdG9yOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjp2bUVudHJ5R2xvYmFsT2Jq
ZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SmF2YVNjcmlwdENhbGxGcmFtZTo6dGhpc1ZhbHVl
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGUpOgor
ICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcDoKKyAgICAgICAg
KEluc3BlY3Rvcjo6ZXh0cmFjdFNvdXJjZUluZm9ybWF0aW9uRnJvbUV4Y2VwdGlvbik6CisgICAg
ICAgIChJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24pOgorICAg
ICAgICAqIGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg6CisgICAgICAgICogaW5z
cGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6U2NyaXB0
RGVidWdTZXJ2ZXI6OmV2YWx1YXRlQnJlYWtwb2ludEFjdGlvbik6CisgICAgICAgIChJbnNwZWN0
b3I6OlNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVCcmVha3BvaW50SGl0KToKKyAgICAgICAgKElu
c3BlY3Rvcjo6U2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENv
bmRpdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmg6CisgICAg
ICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
Y2xlYXJFeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmV4Y2VwdGlvbik6Cisg
ICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aGFkRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6RXhl
Y1N0YXRlOjphdG9taWNTdHJpbmdUYWJsZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6cHJv
cGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6Y2xlYXJTdXBwbGVtZW50YXJ5
RXhjZXB0aW9uSW5mbyk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHA6CisgICAgICAgIChKU0M6OnVud2luZENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpzdGFja1RyYWNlQXNTdHJpbmcpOgorICAgICAgICAoSlNDOjpHZXRDYXRj
aEhhbmRsZXJGdW5jdG9yOjpHZXRDYXRjaEhhbmRsZXJGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6
R2V0Q2F0Y2hIYW5kbGVyRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjp1bndpbmQpOgorICAgICAgICAtIEFkZGVkIGEgY2hlY2sgZm9yIGRpZE5vdGlmeUlu
c3BlY3Rvck9mVGhyb3coKSBoZXJlIHRvIHByZXZlbnQgZHVwbGljYXRlIHJlcG9ydHMKKyAgICAg
ICAgICBvZiB0aGUgc2FtZSBFeGNlcHRpb24gdG8gdGhlIGRlYnVnZ2VyLgorCisgICAgICAgIChK
U0M6OkdldEV4Y2VwdGlvbkhhbmRsZXJGdW5jdG9yOjpHZXRFeGNlcHRpb25IYW5kbGVyRnVuY3Rv
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkdldEV4Y2VwdGlvbkhhbmRsZXJGdW5jdG9yOjpv
cGVyYXRvcigpKTogRGVsZXRlZC4KKyAgICAgICAgLSBSZW5hbWVkIEdldEV4Y2VwdGlvbkhhbmRs
ZXJGdW5jdG9yIHRvIEdldENhdGNoSGFuZGxlckZ1bmN0b3Igc2luY2UgdGhlIGRlYnVnZ2VyCisg
ICAgICAgICAgaXMgb25seSBpbnRlcmVzdGVkIGluIGtub3dpbmcgd2hldGhlciB3ZSBoYXZlIENh
dGNoIGhhbmRsZXJzLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAg
ICAgICAgKEpTQzo6U3VzcGVuZEV4Y2VwdGlvblNjb3BlOjpTdXNwZW5kRXhjZXB0aW9uU2NvcGUp
OgorICAgICAgICAoSlNDOjpTdXNwZW5kRXhjZXB0aW9uU2NvcGU6On5TdXNwZW5kRXhjZXB0aW9u
U2NvcGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6c2FtcGxlcik6CisgICAgICAgIChK
U0M6OkNsZWFyRXhjZXB0aW9uU2NvcGU6OkNsZWFyRXhjZXB0aW9uU2NvcGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDbGVhckV4Y2VwdGlvblNjb3BlOjp+Q2xlYXJFeGNlcHRpb25TY29wZSk6
IERlbGV0ZWQuCisgICAgICAgIC0gUmVuYW1lZCBDbGVhckV4Y2VwdGlvblNjb3BlIHRvIFN1c3Bl
bmRFeGNlcHRpb25TY29wZSBiZWNhdXNlICJjbGVhciIgaW1wbGllcyB0aGF0CisgICAgICAgICAg
d2UncmUgcHVyZ2luZyB0aGUgZXhjZXB0aW9uLiAgSW5zdGVhZCwgd2UncmUgbWVyZWx5IHN1c3Bl
bmRpbmcgYW55IGhhbmRsaW5nIG9mCisgICAgICAgICAgdGhhdCBleGNlcHRpb24gZm9yIGEgcGVy
aW9kIGRlZmluZWQgYnkgdGhlIHNjb3BlLgorCisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2VwdGlvbkNoZWNr
KToKKworICAgICAgICAqIGppdC9KSVRFeGNlcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2Vu
ZXJpY1Vud2luZCk6CisgICAgICAgIC0gUmVtb3ZlZCB0aGUgZXhjZXB0aW9uIGFyZ3VtZW50LiAg
SXQgaXMgYWx3YXlzIHRoZSB2YWx1ZSBpbiBWTTo6ZXhjZXB0aW9uKCkgYW55d2F5LgorICAgICAg
ICAgIGdlbmVyaWNVbndpbmQoKSBjYW4ganVzdCBnZXQgaXQgZnJvbSB0aGUgVk0sIGFuZCBzYXZl
IGV2ZXJ5b25lIHNvbWUgd29yay4KKworICAgICAgICAqIGppdC9KSVRFeGNlcHRpb25zLmg6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Y2F0Y2gpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgb3BfY2F0
Y2ggb3BlcmFuZHMuCisKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
ICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6Om5hdGl2ZUZvckdlbmVy
YXRvcik6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAg
ICAgKGZ1bmN0aW9uTG9hZCk6CisgICAgICAgIChydW5XaXRoU2NyaXB0cyk6CisgICAgICAgIChy
dW5JbnRlcmFjdGl2ZSk6CisgICAgICAgICogbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNw
cDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxM
SW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc206CisgICAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgb3BfY2F0Y2ggb3BlcmFu
ZHMuICBBbHNvIHVwZGF0ZSB0aGUgY29kZSB0byBoYW5kbGUKKyAgICAgICAgICBWTTo6bV9leGNl
cHRpb24gYmVpbmcgYW4gRXhjZXB0aW9uIHBvaW50ZXIsIG5vdCBhIEpTVmFsdWUuCisKKyAgICAg
ICAgKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpUcnlOb2RlOjpU
cnlOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0Nh
bGxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbCk6CisgICAgICAgICogcnVudGltZS9DYWxs
RGF0YS5oOgorCisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpT
Qzo6ZXZhbHVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5oOgorICAgICAgICAo
SlNDOjpldmFsdWF0ZSk6CisgICAgICAgIC0gQ2hhbmdlIGV2YWx1YXRlKCkgdG8gdGFrZSBhIHJl
ZmVyZW5jZSB0byB0aGUgcmV0dXJuZWQgZXhjZXB0aW9uIHZhbHVlIGluc3RlYWQKKyAgICAgICAg
ICBvZiBhIHBvaW50ZXIuICBJbiBhbGwgYnV0IDIgb3IgMyBjYXNlcywgd2Ugd2FudCB0aGUgcmV0
dXJuZWQgZXhjZXB0aW9uIGFueXdheS4KKyAgICAgICAgICBNaWdodCBhcyB3ZWxsIHNpbXBsaWZ5
IHRoZSBjb2RlIGJ5IHJlcXVpcmluZyB0aGUgcmVmZXJlbmNlLgorCisgICAgICAgICogcnVudGlt
ZS9FcnJvci5oOgorICAgICAgICAoSlNDOjp0aHJvd1ZNRXJyb3IpOgorICAgICAgICAoSlNDOjp0
aHJvd1ZNVHlwZUVycm9yKToKKworICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkV4Y2VwdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXhj
ZXB0aW9uOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6RXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAo
SlNDOjpFeGNlcHRpb246OkV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkV4Y2VwdGlvbjo6fkV4
Y2VwdGlvbik6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb24uaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQpOgorICAgICAgICAoSlNDOjpFeGNlcHRpb246
OmNhc3QpOgorICAgICAgICAoSlNDOjpFeGNlcHRpb246OnZhbHVlKToKKyAgICAgICAgKEpTQzo6
RXhjZXB0aW9uOjpzdGFjayk6CisgICAgICAgIChKU0M6OkV4Y2VwdGlvbjo6ZGlkTm90aWZ5SW5z
cGVjdG9yT2ZUaHJvdyk6CisgICAgICAgIChKU0M6OkV4Y2VwdGlvbjo6c2V0RGlkTm90aWZ5SW5z
cGVjdG9yT2ZUaHJvdyk6CisKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3Bw
OgorICAgICAgICAoSlNDOjpjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKToKKyAg
ICAgICAgKEpTQzo6aXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKToKKyAgICAgICAgKEpT
Qzo6Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKToKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlv
bkhlbHBlcnMuaDoKKyAgICAgICAgKiBydW50aW1lL0dldHRlclNldHRlci5jcHA6CisgICAgICAg
IChKU0M6OmNhbGxHZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKEpTQzo6aXRlcmF0b3JDbG9zZSk6CisgICAgICAgICogcnVudGltZS9K
U09iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFByb21pc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQ
cm9taXNlRGVmZXJyZWQuY3BwOgorICAgICAgICAoSlNDOjp1cGRhdGVEZWZlcnJlZEZyb21Qb3Rl
bnRpYWxUaGVuYWJsZSk6CisgICAgICAgIChKU0M6OmFicnVwdFJlamVjdGlvbik6CisgICAgICAg
ICogcnVudGltZS9KU1Byb21pc2VSZWFjdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGVQ
cm9taXNlUmVhY3Rpb25NaWNyb3Rhc2s6OnJ1bik6CisKKyAgICAgICAgKiBydW50aW1lL1ZNLmNw
cDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06OnJlbGVhc2VFeGVj
dXRhYmxlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6Vk06OnRocm93RXhjZXB0aW9uKToKKyAgICAg
ICAgKEpTQzo6Vk06OnNldFN0YWNrUG9pbnRlckF0Vk1FbnRyeSk6CisgICAgICAgIChKU0M6OlZN
OjpnZXRFeGNlcHRpb25JbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Vk06OnNldEV4Y2Vw
dGlvbkluZm8pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6Y2xlYXJFeGNlcHRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpjbGVhckV4Y2VwdGlvblN0YWNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjp0YXJnZXRNYWNoaW5lUENG
b3JUaHJvd09mZnNldCk6CisgICAgICAgIChKU0M6OlZNOjpjbGVhckV4Y2VwdGlvbik6CisgICAg
ICAgIChKU0M6OlZNOjpzZXRFeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpWTTo6ZXhjZXB0aW9u
KToKKyAgICAgICAgKEpTQzo6Vk06OmFkZHJlc3NPZkV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6
OlZNOjpleGNlcHRpb25TdGFjayk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTUVudHJ5
U2NvcGUuY3BwOgorICAgICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6OlZNRW50cnlTY29wZSk6Cisg
ICAgICAgIChKU0M6OlZNRW50cnlTY29wZTo6c2V0RW50cnlTY29wZURpZFBvcExpc3RlbmVyKToK
KwogMjAxNS0wNi0wNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbSlNDXSBBbHdheXMgdHJhY2sgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgZXhw
bGljaXRseSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIHNsb3cgY2FzZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00NTQsNiArNDU0
LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1JVTlRJTUVfU09VUkNFUwogICAgIHJ1bnRpbWUvRXJy
b3JIYW5kbGluZ1Njb3BlLmNwcAogICAgIHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKICAgICBy
dW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAorICAgIHJ1bnRpbWUvRXhjZXB0aW9uLmNwcAogICAg
IHJ1bnRpbWUvRXhjZXB0aW9uRnV6ei5jcHAKICAgICBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
Y3BwCiAgICAgcnVudGltZS9FeGVjdXRhYmxlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJ
KHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgogI2lu
Y2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNp
bmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcu
aCIKQEAgLTg5OSwxMyArOTAwLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25SdW4KICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdCgKICAgICAgICAgZXhlYy0+dm0o
KSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgImFy
Z3VtZW50cyIpLCBhcnJheSk7CiAKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBFeGNlcHRp
b24qIGV4Y2VwdGlvbjsKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwogICAgIHN0b3BXYXRjaC5z
dGFydCgpOwotICAgIGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3Vy
Y2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksICZleGNlcHRpb24pOworICAg
IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LmRh
dGEoKSwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksIGV4Y2VwdGlvbik7CiAgICAgc3RvcFdhdGNoLnN0
b3AoKTsKIAotICAgIGlmICghIWV4Y2VwdGlvbikgeworICAgIGlmIChleGNlcHRpb24pIHsKICAg
ICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSwgZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICB9CkBAIC05MjIsOCArOTIzLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkxvYQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICAKLSAgICBKU1ZhbHVlIGV2YWx1YXRpb25F
eGNlcHRpb247Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdC5kYXRhKCksIGZpbGVOYW1lKSwgSlNWYWx1ZSgp
LCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgRXhjZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0
aW9uOworICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIGpzY1NvdXJjZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgZXZh
bHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCiAgICAgICAg
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtMTI4NSwxNSArMTI4NiwxNSBA
QCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAKICAgICAgICAgdm0u
c3RhcnRTYW1wbGluZygpOwogCi0gICAgICAgIEpTVmFsdWUgZXZhbHVhdGlvbkV4Y2VwdGlvbjsK
LSAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgJmV2YWx1
YXRpb25FeGNlcHRpb24pOworICAgICAgICBFeGNlcHRpb24qIGV2YWx1YXRpb25FeGNlcHRpb247
CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdCwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1
YXRpb25FeGNlcHRpb24pOwogICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiAhZXZhbHVhdGlv
bkV4Y2VwdGlvbjsKICAgICAgICAgaWYgKGR1bXAgJiYgIWV2YWx1YXRpb25FeGNlcHRpb24pCiAg
ICAgICAgICAgICBwcmludGYoIkVuZDogJXNcbiIsIHJldHVyblZhbHVlLnRvU3RyaW5nKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkp
LnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikgewotICAg
ICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLnRv
U3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRp
b246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0
ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgSWRlbnRpZmllciBzdGFja0lEID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgInN0YWNrIik7Ci0gICAg
ICAgICAgICBKU1ZhbHVlIHN0YWNrVmFsdWUgPSBldmFsdWF0aW9uRXhjZXB0aW9uLmdldChnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc3RhY2tJRCk7CisgICAgICAgICAgICBKU1ZhbHVlIHN0
YWNrVmFsdWUgPSBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1ZSgpLmdldChnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSwgc3RhY2tJRCk7CiAgICAgICAgICAgICBpZiAoIXN0YWNrVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCBzdGFja1Zh
bHVlLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICB9CkBAIC0xMzQ5LDgg
KzEzNTAsOCBAQCBzdGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqCiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIGV2YWx1YXRpb25FeGNl
cHRpb247Ci0gICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJjZShzb3VyY2UsIGludGVycHJldGVyTmFtZSksIEpT
VmFsdWUoKSwgJmV2YWx1YXRpb25FeGNlcHRpb24pOworICAgICAgICBFeGNlcHRpb24qIGV2YWx1
YXRpb25FeGNlcHRpb247CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJjZShzb3VyY2UsIGludGVycHJldGVy
TmFtZSksIEpTVmFsdWUoKSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAjZWxzZQogICAgICAgICBw
cmludGYoIiVzIiwgaW50ZXJhY3RpdmVQcm9tcHQpOwogICAgICAgICBWZWN0b3I8Y2hhciwgMjU2
PiBsaW5lOwpAQCAtMTM2NSwxMSArMTM2NiwxMSBAQCBzdGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2
ZShHbG9iYWxPYmplY3QqCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbGluZS5hcHBlbmQo
J1wwJyk7CiAKLSAgICAgICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgICAgICBK
U1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCks
IGpzY1NvdXJjZShsaW5lLmRhdGEoKSwgaW50ZXJwcmV0ZXJOYW1lKSwgSlNWYWx1ZSgpLCAmZXZh
bHVhdGlvbkV4Y2VwdGlvbik7CisgICAgICAgIEV4Y2VwdGlvbiogZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2UobGluZS5kYXRhKCksIGludGVycHJldGVyTmFtZSksIEpT
VmFsdWUoKSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAjZW5kaWYKICAgICAgICAgaWYgKGV2YWx1
YXRpb25FeGNlcHRpb24pCi0gICAgICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGV2
YWx1YXRpb25FeGNlcHRpb24udG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52
YWx1ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICBwcmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGV2YWx1YXRpb25FeGNlcHRpb24tPnZhbHVl
KCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLT52YWx1ZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHByaW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRh
KCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCShyZXZpc2lvbiAx
ODUyNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAi
Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bi5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkluaXRpYWxp
emVUaHJlYWRpbmcuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgpAQCAtNjMsMTIgKzY0
LDEyIEBAIEpTVmFsdWVSZWYgSlNFdmFsdWF0ZVNjcmlwdChKU0NvbnRleHRSZWYKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpOwog
ICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShzY3JpcHQtPnN0cmluZygpLCBzb3Vy
Y2VVUkwgPyBzb3VyY2VVUkwtPnN0cmluZygpIDogU3RyaW5nKCksIFRleHRQb3NpdGlvbihPcmRp
bmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51
bWJlcjo6Zmlyc3QoKSkpOwogCi0gICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAg
IEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSwgc291cmNlLCBqc1RoaXNPYmplY3QsICZldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICBFeGNl
cHRpb24qIGV2YWx1YXRpb25FeGNlcHRpb247CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2
YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBzb3VyY2UsIGpzVGhpc09iamVjdCwg
ZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAKICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikgewog
ICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4
ZWMsIGV2YWx1YXRpb25FeGNlcHRpb24pOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVm
KGV4ZWMsIGV2YWx1YXRpb25FeGNlcHRpb24tPnZhbHVlKCkpOwogI2lmIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQogICAgICAgICAvLyBGSVhNRTogSWYgd2UgaGF2ZSBhIGRlYnVnZ2VyIGF0dGFj
aGVkIHdlIGNvdWxkIGxlYXJuIGFib3V0IFBhcnNlRXJyb3IgZXhjZXB0aW9ucyB0aHJvdWdoCiAg
ICAgICAgIC8vIFNjcmlwdERlYnVnU2VydmVyOjpzb3VyY2VQYXJzZWQgYW5kIHRoaXMgcGF0aCBj
b3VsZCBwcm9kdWNlIGEgZHVwbGljYXRlIHdhcm5pbmcuIFRoZQpAQCAtMTA3LDcgKzEwOCw4IEBA
IGJvb2wgSlNDaGVja1NjcmlwdFN5bnRheChKU0NvbnRleHRSZWYgY3QKICAgICAgICAgaWYgKGV4
Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBzeW50YXhFeGNl
cHRpb24pOwogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVu
dHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRp
b24oZXhlYywgc3ludGF4RXhjZXB0aW9uKTsKKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24g
PSBFeGNlcHRpb246OmNyZWF0ZShleGVjLT52bSgpLCBzeW50YXhFeGNlcHRpb24pOworICAgICAg
ICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBv
cnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKICNlbmRpZgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJl
Zi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJl
Zi5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNP
YmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
Q29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRGF0ZUNvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5j
bHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgpAQCAtNjEsNiArNjIsMjYgQEAKIAogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAorZW51bSBjbGFzcyBFeGNlcHRpb25TdGF0dXMgeworICAgIERpZFRo
cm93LAorICAgIERpZE5vdFRocm93Cit9OworCitzdGF0aWMgRXhjZXB0aW9uU3RhdHVzIGhhbmRs
ZUV4Y2VwdGlvbklmTmVlZGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVJlZiogcmV0dXJuZWRF
eGNlcHRpb25SZWYpCit7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAg
IEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIGlmIChy
ZXR1cm5lZEV4Y2VwdGlvblJlZikKKyAgICAgICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvblJlZiA9
IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvbi0+dmFsdWUoKSk7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgICAgIGV4ZWMtPnZt
RW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2Vw
dGlvbihleGVjLCBleGNlcHRpb24pOworI2VuZGlmCisgICAgICAgIHJldHVybiBFeGNlcHRpb25T
dGF0dXM6OkRpZFRocm93OworICAgIH0KKyAgICByZXR1cm4gRXhjZXB0aW9uU3RhdHVzOjpEaWRO
b3RUaHJvdzsKK30KKwogSlNDbGFzc1JlZiBKU0NsYXNzQ3JlYXRlKGNvbnN0IEpTQ2xhc3NEZWZp
bml0aW9uKiBkZWZpbml0aW9uKQogewogICAgIGluaXRpYWxpemVUaHJlYWRpbmcoKTsKQEAgLTE0
OCwxNiArMTY5LDggQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlRnVuY3Rpb24oSlNDb250ZQog
ICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIGJvZHktPnN0cmluZygpKSk7CiAKICAgICBK
U09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBhcmdzLCBuYW1lSUQsIHNvdXJjZVVSTCA/IHNvdXJjZVVSTC0+c3RyaW5n
KCkgOiBTdHJpbmcoKSwgVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZElu
dChzdGFydGluZ0xpbmVOdW1iZXIpLCBPcmRpbmFsTnVtYmVyOjpmaXJzdCgpKSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUg
PSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAg
ICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAg
IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9y
dEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFu
ZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywgZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6
OkRpZFRocm93KQogICAgICAgICByZXN1bHQgPSAwOwotICAgIH0KICAgICByZXR1cm4gdG9SZWYo
cmVzdWx0KTsKIH0KIApAQCAtMTgwLDE2ICsxOTMsOCBAQCBKU09iamVjdFJlZiBKU09iamVjdE1h
a2VBcnJheShKU0NvbnRleHRSCiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVj
dEVtcHR5QXJyYXkoZXhlYywgMCk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
LSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAg
ICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMs
IGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVj
dCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2Vw
dGlvblZhbHVlKTsKLSNlbmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVj
LCBleGNlcHRpb24pID09IEV4Y2VwdGlvblN0YXR1czo6RGlkVGhyb3cpCiAgICAgICAgIHJlc3Vs
dCA9IDA7Ci0gICAgfQogCiAgICAgcmV0dXJuIHRvUmVmKHJlc3VsdCk7CiB9CkBAIC0yMDgsMTYg
KzIxMyw4IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZURhdGUoSlNDb250ZXh0UmUKICAgICAg
ICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBhcmd1bWVudHNbaV0pKTsKIAogICAgIEpTT2Jq
ZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3REYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgYXJnTGlzdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAg
IEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAgaWYg
KGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGNlcHRp
b25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYgRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25WYWx1
ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywgZXhjZXB0
aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93KQogICAgICAgICByZXN1bHQgPSAwOwot
ICAgIH0KIAogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQpAQCAtMjM1LDE2ICsyMzIsOCBA
QCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VFcnJvcihKU0NvbnRleHRSCiAgICAgU3RydWN0dXJl
KiBlcnJvclN0cnVjdHVyZSA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZXJyb3JTdHJ1
Y3R1cmUoKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4
ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlKTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9u
KCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9S
ZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xv
YmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhl
YywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVl
ZGVkKGV4ZWMsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVzOjpEaWRUaHJvdykKICAgICAg
ICAgcmVzdWx0ID0gMDsKLSAgICB9CiAKICAgICByZXR1cm4gdG9SZWYocmVzdWx0KTsKIH0KQEAg
LTI2MywxNiArMjUyLDggQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlUmVnRXhwKEpTQ29udGV4
dAogICAgICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGFyZ3VtZW50c1tpXSkpOwogCiAg
ICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdFJlZ0V4cChleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksICBhcmdMaXN0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
IHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwot
ICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4
ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNp
ZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9i
amVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4
Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgorICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChl
eGVjLCBleGNlcHRpb24pID09IEV4Y2VwdGlvblN0YXR1czo6RGlkVGhyb3cpCiAgICAgICAgIHJl
c3VsdCA9IDA7Ci0gICAgfQogICAgIAogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQpAQCAt
MzM5LDE1ICszMjAsNyBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJvcGVydHkoSlNDb250ZXh0
CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCiAgICAgSlNWYWx1ZSBq
c1ZhbHVlID0ganNPYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4
ZWMtPnZtKCkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNW
YWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhj
ZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZh
bHVlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKLSAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0
b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsK
LSNlbmRpZgotICAgIH0KKyAgICBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRp
b24pOwogICAgIHJldHVybiB0b1JlZihleGVjLCBqc1ZhbHVlKTsKIH0KIApAQCAtMzcyLDE1ICsz
NDUsNyBAQCB2b2lkIEpTT2JqZWN0U2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGN0CiAgICAgICAg
IGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQoanNPYmplY3QsIGV4ZWMsIG5hbWUsIGpzVmFs
dWUsIHNsb3QpOwogICAgIH0KIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAg
ICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAg
IGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhj
ZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
VmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMs
IGV4Y2VwdGlvbik7CiB9CiAKIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgo
SlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eUlu
ZGV4LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCkBAIC0zOTUsMTUgKzM2MCw3IEBAIEpTVmFsdWVS
ZWYgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoSlMKICAgICBKU09iamVjdCoganNPYmplY3Qg
PSB0b0pTKG9iamVjdCk7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc09iamVjdC0+Z2V0KGV4
ZWMsIHByb3BlcnR5SW5kZXgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAg
ICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAg
IGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhj
ZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
VmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMs
IGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIGpzVmFsdWUpOwogfQogCkBAIC00
MjEsMTUgKzM3OCw3IEBAIHZvaWQgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXgK
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKICAgICAKICAgICBqc09i
amVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChqc09iamVjdCwgZXhlYywgcHJvcGVydHlJ
bmRleCwganNWYWx1ZSwgZmFsc2UpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewot
ICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAg
ICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywg
ZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVO
QUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0
aW9uVmFsdWUpOwotI2VuZGlmCi0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4
ZWMsIGV4Y2VwdGlvbik7CiB9CiAKIGJvb2wgSlNPYmplY3REZWxldGVQcm9wZXJ0eShKU0NvbnRl
eHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAtNDQ0LDE1ICszOTMsNyBAQCBib29sIEpTT2JqZWN0
RGVsZXRlUHJvcGVydHkoSlNDb250ZXh0UmVmCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9K
UyhvYmplY3QpOwogCiAgICAgYm9vbCByZXN1bHQgPSBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkoanNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigm
ZXhlYy0+dm0oKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBK
U1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChl
eGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9u
VmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUp
OwotI2VuZGlmCi0gICAgfQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2Vw
dGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNjE2LDE2ICs1NTcsOCBAQCBKU1Zh
bHVlUmVmIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oSlNDb250CiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgSlNWYWx1ZVJlZiByZXN1bHQgPSB0b1JlZihleGVjLCBjYWxsKGV4ZWMsIGpzT2JqZWN0
LCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVGhpc09iamVjdCwgYXJnTGlzdCkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0g
ZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAq
ZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBl
eGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRB
UElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRs
ZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVzOjpE
aWRUaHJvdykKICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtNjU3LDE2ICs1OTAsOCBAQCBKU09iamVjdFJlZiBKU09iamVjdENhbGxBc0NvbnN0
cnVjdG9yKEpTCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyBpKysp
CiAgICAgICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgYXJndW1lbnRzW2ldKSk7CiAgICAg
SlNPYmplY3RSZWYgcmVzdWx0ID0gdG9SZWYoY29uc3RydWN0KGV4ZWMsIGpzT2JqZWN0LCBjb25z
dHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdMaXN0KSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNl
cHRpb24oKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24g
PSB0b1JlZihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50
cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlv
bihleGVjLCBleGNlcHRpb25WYWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9u
SWZOZWVkZWQoZXhlYywgZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93KQog
ICAgICAgICByZXN1bHQgPSAwOwotICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVmLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVmLmNwcAkocmV2aXNpb24gMTg1
MjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFJlZi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNs
dWRlICJDb21wbGV0aW9uLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNC
YXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNTY3JpcHRSZWZQcml2
YXRlLmgiCkBAIC0xNDIsMTIgKzE0MywxMiBAQCBKU1ZhbHVlUmVmIEpTU2NyaXB0RXZhbHVhdGUo
SlNDb250ZXh0UmVmCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KLSAgICBKU1ZhbHVlIGludGVybmFsRXhjZXB0aW9uOworICAg
IEV4Y2VwdGlvbiogaW50ZXJuYWxFeGNlcHRpb247CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSB0
aGlzVmFsdWVSZWYgPyB0b0pTKGV4ZWMsIHRoaXNWYWx1ZVJlZikgOiBqc1VuZGVmaW5lZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoZXhlYywgU291cmNlQ29kZShzY3JpcHQpLCB0
aGlzVmFsdWUsICZpbnRlcm5hbEV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBldmFs
dWF0ZShleGVjLCBTb3VyY2VDb2RlKHNjcmlwdCksIHRoaXNWYWx1ZSwgaW50ZXJuYWxFeGNlcHRp
b24pOwogICAgIGlmIChpbnRlcm5hbEV4Y2VwdGlvbikgewogICAgICAgICBpZiAoZXhjZXB0aW9u
KQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGludGVybmFsRXhjZXB0aW9u
KTsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBpbnRlcm5hbEV4Y2VwdGlv
bi0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBBU1NFUlQocmVzdWx0
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0JKHJldmlzaW9uIDE4NTI0
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogI2ltcG9ydCAiQVBJQ2FzdC5oIgogI2ltcG9ydCAiRGF0ZUlu
c3RhbmNlLmgiCiAjaW1wb3J0ICJFcnJvci5oIgorI2ltcG9ydCAiRXhjZXB0aW9uLmgiCiAjaW1w
b3J0ICJKYXZhU2NyaXB0Q29yZS5oIgogI2ltcG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKICNp
bXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgpAQCAtNjQ1LDkgKzY0NiwxMCBAQCBK
U0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayBKU0NvbnRhaW5lckNvCiB9CiAKICNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKLXN0YXRpYyB2b2lkIHJlcG9ydEV4Y2VwdGlvblRvSW5zcGVjdG9y
KEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uKQorc3Rh
dGljIHZvaWQgcmVwb3J0RXhjZXB0aW9uVG9JbnNwZWN0b3IoSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb25WYWx1ZSkKIHsKICAgICBKU0M6OkV4ZWNTdGF0
ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiA9
IEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9uVmFsdWUpOwogICAg
IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9y
dEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNsdWRlICJEYXRlSW5z
dGFuY2UuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0FQSVdyYXBwZXJP
YmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5o
IgpAQCAtNTIsNiArNTMsMjYgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAorZW51bSBjbGFz
cyBFeGNlcHRpb25TdGF0dXMgeworICAgIERpZFRocm93LAorICAgIERpZE5vdFRocm93Cit9Owor
CitzdGF0aWMgRXhjZXB0aW9uU3RhdHVzIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZVJlZiogcmV0dXJuZWRFeGNlcHRpb25SZWYpCit7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhl
Yy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvblJlZikKKyAgICAg
ICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvblJlZiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvbi0+dmFs
dWUoKSk7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisjaWYgRU5BQkxFKFJFTU9U
RV9JTlNQRUNUT1IpCisgICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOworI2Vu
ZGlmCisgICAgICAgIHJldHVybiBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93OworICAgIH0KKyAg
ICByZXR1cm4gRXhjZXB0aW9uU3RhdHVzOjpEaWROb3RUaHJvdzsKK30KKwogI2lmIFBMQVRGT1JN
KE1BQykKIHN0YXRpYyBib29sIGV2ZXJub3RlSGFja05lZWRlZCgpCiB7CkBAIC0yMjQsMTUgKzI0
NSw4IEBAIGJvb2wgSlNWYWx1ZUlzRXF1YWwoSlNDb250ZXh0UmVmIGN0eCwgSlMKICAgICBKU1Zh
bHVlIGpzQiA9IHRvSlMoZXhlYywgYik7CiAKICAgICBib29sIHJlc3VsdCA9IEpTVmFsdWU6OmVx
dWFsKGV4ZWMsIGpzQSwganNCKTsgLy8gZmFsc2UgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93bgot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAg
ICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQot
ICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCi0gICAg
fQorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjY2LDE1ICsyODAsNyBAQCBib29sIEpTVmFsdWVJ
c0luc3RhbmNlT2ZDb25zdHJ1Y3RvcihKU0NvCiAgICAgaWYgKCFqc0NvbnN0cnVjdG9yLT5zdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGJvb2wgcmVzdWx0ID0ganNDb25zdHJ1Y3Rvci0+aGFzSW5zdGFuY2Uo
ZXhlYywganNWYWx1ZSk7IC8vIGZhbHNlIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24KLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1
ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAg
ICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAg
ICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVw
b3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKLSNlbmRpZgotICAgIH0KKyAg
ICBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKQEAgLTM2OCwxNiArMzc0LDggQEAgSlNTdHJpbmdSZWYgSlNWYWx1ZUNyZWF0
ZUpTT05TdHJpbmcoSlNDbwogICAgIFN0cmluZyByZXN1bHQgPSBKU09OU3RyaW5naWZ5KGV4ZWMs
IHZhbHVlLCBpbmRlbnQpOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICpleGNlcHRpb24g
PSAwOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4
Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24p
Ci0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwot
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRy
b2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlm
CisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikgPT0gRXhj
ZXB0aW9uU3RhdHVzOjpEaWRUaHJvdykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogICAgIHJl
dHVybiBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKHJlc3VsdCkubGVha1JlZigpOwogfQogCkBAIC00
MDYsMTYgKzQwNCw4IEBAIGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0eCwK
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKIAogICAgIGRvdWJsZSBu
dW1iZXIgPSBqc1ZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9u
KCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9S
ZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xv
YmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhl
YywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVl
ZGVkKGV4ZWMsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVzOjpEaWRUaHJvdykKICAgICAg
ICAgbnVtYmVyID0gUE5hTjsKLSAgICB9CiAgICAgcmV0dXJuIG51bWJlcjsKIH0KIApAQCAtNDMx
LDE2ICs0MjEsOCBAQCBKU1N0cmluZ1JlZiBKU1ZhbHVlVG9TdHJpbmdDb3B5KEpTQ29udGV4CiAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CiAgICAgCiAgICAgUmVmUHRy
PE9wYXF1ZUpTU3RyaW5nPiBzdHJpbmdSZWYoT3BhcXVlSlNTdHJpbmc6OmNyZWF0ZShqc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhlYy0+ZXhjZXB0aW9u
KCk7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9S
ZWYoZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OwotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBleGVjLT52bUVudHJ5R2xv
YmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhl
YywgZXhjZXB0aW9uVmFsdWUpOwotI2VuZGlmCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVl
ZGVkKGV4ZWMsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVzOjpEaWRUaHJvdykKICAgICAg
ICAgc3RyaW5nUmVmLmNsZWFyKCk7Ci0gICAgfQogICAgIHJldHVybiBzdHJpbmdSZWYucmVsZWFz
ZSgpLmxlYWtSZWYoKTsKIH0KIApAQCAtNDU2LDE2ICs0MzgsOCBAQCBKU09iamVjdFJlZiBKU1Zh
bHVlVG9PYmplY3QoSlNDb250ZXh0UmVmCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVj
LCB2YWx1ZSk7CiAgICAgCiAgICAgSlNPYmplY3RSZWYgb2JqZWN0UmVmID0gdG9SZWYoanNWYWx1
ZS50b09iamVjdChleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAg
aWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGNl
cHRpb25WYWx1ZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0jaWYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCi0gICAgICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25W
YWx1ZSk7Ci0jZW5kaWYKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoZXhlYywgZXhj
ZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93KQogICAgICAgICBvYmplY3RSZWYg
PSAwOwotICAgIH0KICAgICByZXR1cm4gb2JqZWN0UmVmOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTcxMiw2ICs3MTIsNyBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxFcnJvckhhbmRsaW5nU2NvcGUuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJvckluc3RhbmNlLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JQcm90b3R5cGUuY3BwIiAvPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb24uY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb25GdXp6LmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uSGVscGVycy5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4ZWN1dGFibGUuY3BwIiAvPgpAQCAtMTUwMyw2
ICsxNTA0LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JIYW5k
bGluZ1Njb3BlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEVycm9y
SW5zdGFuY2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JQ
cm90b3R5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0
aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlvbkZ1
enouaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uSGVs
cGVycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGVjdXRhYmxl
LmgiIC8+CkBAIC0xODI3LDQgKzE4MjksNCBAQAogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVu
c2lvblRhcmdldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxCdWls
ZEN1c3RvbWl6YXRpb25zXG1hc20udGFyZ2V0cyIgLz4KICAgPC9JbXBvcnRHcm91cD4KLTwvUHJv
amVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lv
biAxODUyNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTE2OTgs
NiArMTY5OCw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFsdWVTdHJl
bmd0aC5jcHAiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uLmNwcCI+CisgICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uRnV6ei5jcHAiPgogICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC00MTkwLDYgKzQxOTMsOSBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhbHVlU3RyZW5ndGguaCI+CiAg
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb24uaCI+CisgICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcRXhjZXB0aW9uRnV6ei5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtNDQ4NSw0ICs0NDkxLDQgQEAKICAgICAgIDxGaWx0ZXI+
aml0PC9GaWx0ZXI+CiAgICAgPC9NQVNNPgogICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTE2NjAsNiArMTY2MCw4IEBACiAJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3Vy
Y2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ5REMxNDkxMkVGMjYxQTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGVJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkUwRDRBMDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwRDRBMDQx
QUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwICovOyB9OwogCQlG
RTBENEEwOTFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEQ0
QTA3MUFCQTI0MzcwMDJGNTRCRiAvKiBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuY3Bw
ICovOyB9OworCQlGRTFDMEZGRDFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFDMEZGQzFCMTkzRTk4
MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJRkUxQzBGRkYxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFDMEZG
RTFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0aW9uLmNwcCAqLzsgfTsKIAkJRkUyMENFOUQxNUYw
NEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwICovOyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUMx
NUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTM4NEVFNTFBRERCN0FEMDA1NURFMkMgLyogSlNE
b2xsYXJWTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTM4NEVFMTFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5jcHAgKi87IH07CkBAIC0z
NDYzLDYgKzM0NjUsOCBAQAogCQlGRTBENEEwNTFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFeGVjdXRp
b25UaW1lTGltaXRUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTBENEEwNzFBQkEyNDM3MDAyRjU0
QkYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5jcHA7
IHBhdGggPSBBUEkvdGVzdHMvR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDRBMDgxQUJBMjQzNzAwMkY1NEJGIC8qIEds
b2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0
cy9HbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkUxQzBGRkUxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRD
TG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29w
LmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7IHBhdGggPSBsbGludC9MTElu
dENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzg0RUUxMUFEREI3QUQw
MDU1REUyQyAvKiBKU0RvbGxhclZNLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTRG9sbGFyVk0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQy
Nyw2ICs0NDMxLDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0
YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlw
ZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBl
LmggKi8sCisJCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAor
CQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwICovLAogCQkJCTBG
MTJERTBEMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmNwcCAqLywKIAkJCQkwRjEy
REUwRTE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oICovLAogCQkJCTE0MjlEODc3
MEVEMjFBQ0QwMEI4OTYxOSAvKiBFeGNlcHRpb25IZWxwZXJzLmNwcCAqLywKQEAgLTU2MjQsNiAr
NTYzMCw3IEBACiAJCQkJRkU0RDU1QjgxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1MDY4NjUxQUUyNDYzOTAwMDlEQUI3IC8qIERlZmVy
cmVkU291cmNlRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzQ0MkNCMjUxQTZDREI4QzAwNUQz
RDdDIC8qIEpTSW5wdXRzLmpzb24gaW4gSGVhZGVycyAqLywKKwkJCQlGRTFDMEZGRDFCMTkzRTk4
MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQx
NzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTVFQTcxMEUxOUY2REY4MTAwOThGNUVDIC8qIEluc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC03NDA4LDYgKzc0MTUsNyBA
QAogCQkJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENEMjE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNl
RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0RTFFMTdCRUUyMkUwMDdDQjYz
QSAvKiBKU1Byb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkUxQzBGRkYx
QjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDlG
Qjg2QjFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3QzAwOENERTE4NzEyNThEMDA5NTVDMjQgLyogSlNQcm9taXNlUmVhY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAwOUYxN0QwIC8qIEpTUHJveHku
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
U2NyaXB0RnVuY3Rpb25DYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkocmV2aXNpb24gMTg1MjQ2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMywxMSArMTMzLDExIEBAIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
IFNjcmlwdEZ1bmN0aW9uQ2EKICAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
KCk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBF
eGNlcHRpb24qIGV4Y2VwdGlvbjsKICAgICBpZiAobV9jYWxsSGFuZGxlcikKLSAgICAgICAgcmVz
dWx0ID0gbV9jYWxsSGFuZGxlcihtX2V4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEs
IHRoaXNPYmplY3QsIG1fYXJndW1lbnRzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgcmVzdWx0ID0g
bV9jYWxsSGFuZGxlcihtX2V4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNP
YmplY3QsIG1fYXJndW1lbnRzLCBleGNlcHRpb24pOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0
ID0gSlNDOjpjYWxsKG1fZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc09i
amVjdCwgbV9hcmd1bWVudHMsICZleGNlcHRpb24pOworICAgICAgICByZXN1bHQgPSBKU0M6OmNh
bGwobV9leGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzT2JqZWN0LCBtX2Fy
Z3VtZW50cywgZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgaGFk
RXhjZXB0aW9uID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9T
Y3JpcHRGdW5jdGlvbkNhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmgJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuaAkod29ya2luZyBj
b3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFU
RSBTY3JpcHRGdW5jdGlvbkNhbGwgOiBwdWJsaWMgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlciB7
CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTVmFsdWUgKCpTY3JpcHRGdW5jdGlvbkNhbGxI
YW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0
LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwg
SlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBKU0M6OkpT
VmFsdWUqIGV4Y2VwdGlvbik7CisgICAgdHlwZWRlZiBKU0M6OkpTVmFsdWUgKCpTY3JpcHRGdW5j
dGlvbkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1bmN0
aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiBj
YWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdz
LCBKU0M6OkV4Y2VwdGlvbiomIGV4Y2VwdGlvbik7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKGNv
bnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBTY3JpcHRG
dW5jdGlvbkNhbGxIYW5kbGVyIGhhbmRsZXIgPSBudWxscHRyKTsKICAgICBTY3JpcHRWYWx1ZSBj
YWxsKGJvb2wmIGhhZEV4Y2VwdGlvbik7CiAgICAgU2NyaXB0VmFsdWUgY2FsbCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgko
cmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX3B1c2hfd2l0aF9zY29wZSIsICJsZW5ndGgiIDogMyB9LAogICAg
ICAgICAgICAgeyAibmFtZSIgOiAib3BfcG9wX3Njb3BlIiwgImxlbmd0aCIgOiAyIH0sCiAgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXNoX25hbWVfc2NvcGUiLCAibGVuZ3RoIiA6IDUgfSwK
LSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NhdGNoIiwgImxlbmd0aCIgOiAyIH0sCisgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9jYXRjaCIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfdGhyb3ciLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX3Rocm93X3N0YXRpY19lcnJvciIsICJsZW5ndGgiIDogMyB9LAogICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfZGVidWciLCAibGVuZ3RoIiA6IDMgfSwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lv
biAxODUyNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VE
ZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcgKzMwMyw2IEBAIHZvaWQgY29tcHV0ZURlZnNG
b3JCeXRlY29kZU9mZnNldChDb2RlQmwKICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CiAgICAg
Y2FzZSBvcF9zdHJjYXQ6CiAgICAgY2FzZSBvcF90b19wcmltaXRpdmU6Ci0gICAgY2FzZSBvcF9j
YXRjaDoKICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgogICAgIGNhc2Ugb3BfbmV3X2FycmF5Ogog
ICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKQEAgLTM3NCw2ICszNzMsNyBAQCB2b2lkIGNv
bXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgICAgIGZ1bmN0b3IoY29kZUJs
b2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBvcF9jYXRjaDoKICAgICBjYXNlIG9wX2Ny
ZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OiB7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBp
bnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAg
IGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0ODQsNyArMTQ4NCw5IEBA
IHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBv
cF9jYXRjaDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJjYXRjaCIsIHIwKTsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAiY2F0Y2giKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lz
dGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3Rocm93OiB7CkBAIC0yODc4LDcg
KzI4ODAsNyBAQCBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoCiB9CiAj
ZW5kaWYKIAotSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0
KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxl
ckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRs
ZXIgcmVxdWlyZWRIYW5kbGVyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0
IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIApAQCAtMjg4OCw2ICsyODkwLDkgQEAgSGFuZGxl
ckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjbwogICAgIFZlY3RvcjxIYW5kbGVySW5m
bz4mIGV4Y2VwdGlvbkhhbmRsZXJzID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyczsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcnNbaV07
CisgICAgICAgIGlmICgocmVxdWlyZWRIYW5kbGVyID09IFJlcXVpcmVkSGFuZGxlcjo6Q2F0Y2hI
YW5kbGVyKSAmJiAhaGFuZGxlci5pc0NhdGNoSGFuZGxlcigpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKICAgICAgICAgLy8gSGFuZGxlcnMgYXJlIG9yZGVyZWQgaW5uZXJtb3N0IGZpcnN0LCBz
byB0aGUgZmlyc3QgaGFuZGxlciB3ZSBlbmNvdW50ZXIKICAgICAgICAgLy8gdGhhdCBjb250YWlu
cyB0aGUgc291cmNlIGFkZHJlc3MgaXMgdGhlIGNvcnJlY3QgaGFuZGxlciB0byB1c2UuCiAgICAg
ICAgIGlmIChoYW5kbGVyLnN0YXJ0IDw9IGJ5dGVjb2RlT2Zmc2V0ICYmIGhhbmRsZXIuZW5kID4g
Ynl0ZWNvZGVPZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiAxODUyNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw3ICsxODUsMTEgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gaW5kZXggPj0gbV9udW1WYXJzOwogICAgIH0KIAotICAgIEhh
bmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpOworICAgIGVudW0gY2xhc3MgUmVxdWlyZWRIYW5kbGVyIHsKKyAgICAgICAgQ2F0Y2hIYW5k
bGVyLAorICAgICAgICBBbnlIYW5kbGVyCisgICAgfTsKKyAgICBIYW5kbGVySW5mbyogaGFuZGxl
ckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRs
ZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwogICAgIHVuc2lnbmVkIGxpbmVOdW1i
ZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAgdW5zaWdu
ZWQgY29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQp
OwogICAgIHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSGFuZGxlckluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSGFuZGxlckluZm8uaAkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAgZW51bSBjbGFzcyBIYW5kbGVyVHlwZSB7CiBzdHJ1Y3QgSGFuZGxlckluZm9CYXNl
IHsKICAgICBIYW5kbGVyVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SGFu
ZGxlclR5cGU+KHR5cGVCaXRzKTsgfQogICAgIHZvaWQgc2V0VHlwZShIYW5kbGVyVHlwZSB0eXBl
KSB7IHR5cGVCaXRzID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5cGUpOyB9Ci0gICAgCisKICAg
ICBjb25zdCBjaGFyKiB0eXBlTmFtZSgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUoKSkg
ewpAQCAtNTUsOSArNTUsOSBAQCBzdHJ1Y3QgSGFuZGxlckluZm9CYXNlIHsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgCisKICAgICBib29sIGlzQ2F0Y2hI
YW5kbGVyKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEhhbmRsZXJUeXBlOjpDYXRjaDsgfQot
ICAgIAorCiAgICAgdWludDMyX3Qgc3RhcnQ7CiAgICAgdWludDMyX3QgZW5kOwogICAgIHVpbnQz
Ml90IHRhcmdldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODUyNDYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUyOCw3ICsyNTI4LDcgQEAgVHJ5RGF0YSogQnl0ZWNvZGVHZW5l
cmF0b3I6OnB1c2hUcnkoTGFiZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BUcnlBbmRFbWl0Q2F0Y2goVHJ5RGF0YSogdHJ5RGF0YSwg
UmVnaXN0ZXJJRCogdGFyZ2V0UmVnaXN0ZXIsIExhYmVsKiBlbmQsIEhhbmRsZXJUeXBlIGhhbmRs
ZXJUeXBlKQordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kRW1pdENhdGNoKFRyeURh
dGEqIHRyeURhdGEsIFJlZ2lzdGVySUQqIGV4Y2VwdGlvblJlZ2lzdGVyLCBSZWdpc3RlcklEKiB0
aHJvd25WYWx1ZVJlZ2lzdGVyLCBMYWJlbCogZW5kLCBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZSkK
IHsKICAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKICAgICAKQEAgLTI1NDYsOCArMjU0Niw4
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BUcnlBbmQKICAgICB0cnlSYW5n
ZS50cnlEYXRhLT5oYW5kbGVyVHlwZSA9IGhhbmRsZXJUeXBlOwogCiAgICAgZW1pdE9wY29kZShv
cF9jYXRjaCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldFJlZ2lzdGVyLT5pbmRl
eCgpKTsKLSAgICByZXR1cm4gdGFyZ2V0UmVnaXN0ZXI7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGV4Y2VwdGlvblJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQodGhyb3duVmFsdWVSZWdpc3Rlci0+aW5kZXgoKSk7CiB9CiAKIHZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKQEAg
LTI3NjAsNyArMjc2MCwxMSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRp
b24oCiAgICAgICAgIC8vIEl0ZXJhdG9yQ2xvc2Ugc2VxdWVuY2UgZm9yIHRocm93LWVkIGNvbnRy
b2wgZmxvdy4KICAgICAgICAgewogICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBjYXRjaEhlcmUg
PSBlbWl0TGFiZWwobmV3TGFiZWwoKS5nZXQoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gZXhjZXB0aW9uUmVnaXN0ZXIgPSBwb3BUcnlBbmRFbWl0Q2F0Y2godHJ5RGF0YSwgbmV3
VGVtcG9yYXJ5KCksIGNhdGNoSGVyZS5nZXQoKSwgSGFuZGxlclR5cGU6OlN5bnRoZXNpemVkRmlu
YWxseSk7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVnaXN0ZXIg
PSBuZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aHJvd25W
YWx1ZVJlZ2lzdGVyID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgICAgICAgICBwb3BUcnlBbmRFbWl0
Q2F0Y2godHJ5RGF0YSwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksCisgICAgICAgICAgICAgICAg
dGhyb3duVmFsdWVSZWdpc3Rlci5nZXQoKSwgY2F0Y2hIZXJlLmdldCgpLCBIYW5kbGVyVHlwZTo6
U3ludGhlc2l6ZWRGaW5hbGx5KTsKKwogICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBjYXRjaERv
bmUgPSBuZXdMYWJlbCgpOwogCiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJu
TWV0aG9kID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIGl0ZXJhdG9yLmdldCgpLCBwcm9w
ZXJ0eU5hbWVzKCkucmV0dXJuS2V5d29yZCk7CkBAIC0yNzc4LDcgKzI3ODIsOCBAQCB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24oCiAgICAgICAgICAgICBlbWl0VGhyb3co
ZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkpOwogCiAgICAgICAgICAgICAvLyBBYnNvcmIgZXhjZXB0
aW9uLgotICAgICAgICAgICAgcG9wVHJ5QW5kRW1pdENhdGNoKHJldHVybkNhbGxUcnlEYXRhLCBu
ZXdUZW1wb3JhcnkoKSwgY2F0Y2hEb25lLmdldCgpLCBIYW5kbGVyVHlwZTo6U3ludGhlc2l6ZWRG
aW5hbGx5KTsKKyAgICAgICAgICAgIHBvcFRyeUFuZEVtaXRDYXRjaChyZXR1cm5DYWxsVHJ5RGF0
YSwgbmV3VGVtcG9yYXJ5KCksCisgICAgICAgICAgICAgICAgbmV3VGVtcG9yYXJ5KCksIGNhdGNo
RG9uZS5nZXQoKSwgSGFuZGxlclR5cGU6OlN5bnRoZXNpemVkRmluYWxseSk7CiAgICAgICAgICAg
ICBlbWl0VGhyb3coZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkpOwogICAgICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTUzLDcg
KzU1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBTdGFydCBhIHRyeSBibG9jay4g
J3N0YXJ0JyBtdXN0IGhhdmUgYmVlbiBlbWl0dGVkLgogICAgICAgICBUcnlEYXRhKiBwdXNoVHJ5
KExhYmVsKiBzdGFydCk7CiAgICAgICAgIC8vIEVuZCBhIHRyeSBibG9jay4gJ2VuZCcgbXVzdCBo
YXZlIGJlZW4gZW1pdHRlZC4KLSAgICAgICAgUmVnaXN0ZXJJRCogcG9wVHJ5QW5kRW1pdENhdGNo
KFRyeURhdGEqLCBSZWdpc3RlcklEKiB0YXJnZXRSZWdpc3RlciwgTGFiZWwqIGVuZCwgSGFuZGxl
clR5cGUpOworICAgICAgICB2b2lkIHBvcFRyeUFuZEVtaXRDYXRjaChUcnlEYXRhKiwgUmVnaXN0
ZXJJRCogZXhjZXB0aW9uUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHRocm93blZhbHVlUmVnaXN0ZXIs
IExhYmVsKiBlbmQsIEhhbmRsZXJUeXBlKTsKIAogICAgICAgICB2b2lkIGVtaXRUaHJvdyhSZWdp
c3RlcklEKiBleGMpCiAgICAgICAgIHsgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxODUyNDYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4ODEsNyArMjg4MSw5IEBAIHZvaWQgVHJ5Tm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXIKIAogICAgICAgICAvLyBVbmNhdWdodCBleGNlcHRpb24gcGF0aDog
dGhlIGNhdGNoIGJsb2NrLgogICAgICAgICBSZWZQdHI8TGFiZWw+IGhlcmUgPSBnZW5lcmF0b3Iu
ZW1pdExhYmVsKGdlbmVyYXRvci5uZXdMYWJlbCgpLmdldCgpKTsKLSAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gZ2VuZXJhdG9yLnBvcFRyeUFuZEVtaXRDYXRj
aCh0cnlEYXRhLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGhlcmUuZ2V0KCksIEhhbmRsZXJU
eXBlOjpDYXRjaCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNlcHRpb25SZWdpc3Rl
ciA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHRocm93blZhbHVlUmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAg
IGdlbmVyYXRvci5wb3BUcnlBbmRFbWl0Q2F0Y2godHJ5RGF0YSwgZXhjZXB0aW9uUmVnaXN0ZXIu
Z2V0KCksIHRocm93blZhbHVlUmVnaXN0ZXIuZ2V0KCksIGhlcmUuZ2V0KCksIEhhbmRsZXJUeXBl
OjpDYXRjaCk7CiAgICAgICAgIAogICAgICAgICBpZiAobV9maW5hbGx5QmxvY2spIHsKICAgICAg
ICAgICAgIC8vIElmIHRoZSBjYXRjaCBibG9jayB0aHJvd3MgYW4gZXhjZXB0aW9uIGFuZCB3ZSBo
YXZlIGEgZmluYWxseSBibG9jaywgdGhlbiB0aGUgZmluYWxseQpAQCAtMjg4OSw3ICsyODkxLDcg
QEAgdm9pZCBUcnlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcgogICAgICAgICAgICAg
dHJ5RGF0YSA9IGdlbmVyYXRvci5wdXNoVHJ5KGhlcmUuZ2V0KCkpOwogICAgICAgICB9CiAKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQdXNoQ2F0Y2hTY29wZShnZW5lcmF0b3Iuc2NvcGVSZWdpc3Rl
cigpLCBtX2V4Y2VwdGlvbklkZW50LCBleGNlcHRpb25SZWdpc3Rlci5nZXQoKSwgRG9udERlbGV0
ZSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHVzaENhdGNoU2NvcGUoZ2VuZXJhdG9yLnNjb3Bl
UmVnaXN0ZXIoKSwgbV90aHJvd25WYWx1ZUlkZW50LCB0aHJvd25WYWx1ZVJlZ2lzdGVyLmdldCgp
LCBEb250RGVsZXRlKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3co
bV90cnlCbG9jay0+ZW5kT2Zmc2V0KCkgKyAxKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2Rl
KGRzdCwgbV9jYXRjaEJsb2NrKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQb3BTY29wZShnZW5l
cmF0b3Iuc2NvcGVSZWdpc3RlcigpKTsKQEAgLTI5MTIsMTAgKzI5MTQsMTIgQEAgdm9pZCBUcnlO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcgogICAgICAgICBnZW5lcmF0b3IuZW1pdEp1
bXAoZmluYWxseUVuZExhYmVsLmdldCgpKTsKIAogICAgICAgICAvLyBVbmNhdWdodCBleGNlcHRp
b24gcGF0aDogaW52b2tlIHRoZSBmaW5hbGx5IGJsb2NrLCB0aGVuIHJlLXRocm93IHRoZSBleGNl
cHRpb24uCi0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wRXhjZXB0aW9uUmVnaXN0ZXIg
PSBnZW5lcmF0b3IucG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgcHJlRmluYWxseUxhYmVsLmdldCgpLCBIYW5kbGVyVHlwZTo6RmluYWxseSk7Cisg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNlcHRpb25SZWdpc3RlciA9IGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRocm93blZhbHVlUmVn
aXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BU
cnlBbmRFbWl0Q2F0Y2godHJ5RGF0YSwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksIHRocm93blZh
bHVlUmVnaXN0ZXIuZ2V0KCksIHByZUZpbmFsbHlMYWJlbC5nZXQoKSwgSGFuZGxlclR5cGU6OkZp
bmFsbHkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhmaW5hbGx5
U3RhcnRPZmZzZXQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2ZpbmFsbHlC
bG9jayk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0VGhyb3codGVtcEV4Y2VwdGlvblJlZ2lzdGVy
LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRUaHJvdyhleGNlcHRpb25SZWdpc3Rlci5n
ZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChmaW5hbGx5RW5kTGFiZWwuZ2V0
KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhtX2ZpbmFsbHlC
bG9jay0+ZW5kT2Zmc2V0KCkgKyAxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyLmNwcAkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg3LDcgKzQ4
Nyw3IEBAIGJvb2wgRGVidWdnZXI6Omhhc0JyZWFrcG9pbnQoU291cmNlSUQgc28KICAgICAvLyBz
byBtYWtlIGl0IGxvb2tzIGxpa2UgdGhlIGRlYnVnZ2VyIGlzIGFscmVhZHkgcGF1c2VkLgogICAg
IFRlbXBvcmFyeVBhdXNlZFN0YXRlIHBhdXNlZFN0YXRlKCp0aGlzKTsKIAotICAgIEpTVmFsdWUg
ZXhjZXB0aW9uOworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uOwogICAgIERlYnVnZ2VyQ2FsbEZy
YW1lKiBkZWJ1Z2dlckNhbGxGcmFtZSA9IGN1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZSgpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0gZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKGJyZWFrcG9pbnQt
PmNvbmRpdGlvbiwgZXhjZXB0aW9uKTsKIApAQCAtNjk1LDEzICs2OTUsMTMgQEAgdm9pZCBEZWJ1
Z2dlcjo6cGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIAogICAgIH0KIH0KIAotdm9pZCBEZWJ1Z2dl
cjo6ZXhjZXB0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgYm9v
bCBoYXNIYW5kbGVyKQordm9pZCBEZWJ1Z2dlcjo6ZXhjZXB0aW9uKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgYm9vbCBoYXNDYXRjaEhhbmRsZXIpCiB7CiAgICAgaWYg
KG1faXNQYXVzZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIFBhdXNlUmVhc29uRGVjbGFyYXRp
b24gcmVhc29uKCp0aGlzLCBQYXVzZWRGb3JFeGNlcHRpb24pOwotICAgIGlmIChtX3BhdXNlT25F
eGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPbkFsbEV4Y2VwdGlvbnMgfHwgKG1fcGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSA9PSBQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zICYmICFoYXNIYW5kbGVyKSkg
eworICAgIGlmIChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPbkFsbEV4Y2VwdGlv
bnMgfHwgKG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9PSBQYXVzZU9uVW5jYXVnaHRFeGNlcHRp
b25zICYmICFoYXNDYXRjaEhhbmRsZXIpKSB7CiAgICAgICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1l
bnQgPSB0cnVlOwogICAgICAgICBzZXRTdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRW5hYmxlZCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJ
KHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB2b2lkIHNvdXJjZVBhcnNlZChFeGVjU3RhdGUqLCBTb3VyY2VQcm92aWRlciosIGlu
dCBlcnJvckxpbmVOdW1iZXIsIGNvbnN0IFdURjo6U3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsK
IAotICAgIHZvaWQgZXhjZXB0aW9uKENhbGxGcmFtZSosIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUs
IGJvb2wgaGFzSGFuZGxlcik7CisgICAgdm9pZCBleGNlcHRpb24oQ2FsbEZyYW1lKiwgSlNWYWx1
ZSBleGNlcHRpb25WYWx1ZSwgYm9vbCBoYXNDYXRjaEhhbmRsZXIpOwogICAgIHZvaWQgYXRTdGF0
ZW1lbnQoQ2FsbEZyYW1lKik7CiAgICAgdm9pZCBjYWxsRXZlbnQoQ2FsbEZyYW1lKik7CiAgICAg
dm9pZCByZXR1cm5FdmVudChDYWxsRnJhbWUqKTsKQEAgLTEyNCw3ICsxMjQsNyBAQCBwdWJsaWM6
CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIG5lZWRQYXVzZUhhbmRsaW5nKEpTR2xvYmFs
T2JqZWN0KikgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQnJlYWtw
b2ludEhpdChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEJyZWFrcG9pbnQmKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlRXhjZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKEV4ZWNTdGF0ZSos
IEpTVmFsdWUgZXhjZXB0aW9uKSBjb25zdCB7IFVOVVNFRF9QQVJBTShleGNlcHRpb24pOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlvbihFeGVj
U3RhdGUqLCBFeGNlcHRpb24qKSBjb25zdCB7IH0KICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGF1
c2UoSlNHbG9iYWxPYmplY3QqLCBSZWFzb25Gb3JQYXVzZSkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IG5vdGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKSB7IH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3Bw
CShyZXZpc2lvbiAxODUyNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJFdmFsRW5hYmxlci5oIgogI2lu
Y2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRl
ICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0xl
eGljYWxFbnZpcm9ubWVudC5oIgpAQCAtMTc2LDcgKzE3Nyw3IEBAIEpTVmFsdWUgRGVidWdnZXJD
YWxsRnJhbWU6OnRoaXNWYWx1ZSgpIGMKIH0KIAogLy8gRXZhbHVhdGUgc29tZSBKYXZhU2NyaXB0
IGNvZGUgaW4gdGhlIHNjb3BlIG9mIHRoaXMgZnJhbWUuCi1KU1ZhbHVlIERlYnVnZ2VyQ2FsbEZy
YW1lOjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNWYWx1ZSYgZXhjZXB0aW9uKQor
SlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQs
IEV4Y2VwdGlvbiomIGV4Y2VwdGlvbikKIHsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IG1fY2FsbEZyYW1lOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE4
NTI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFt
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAog
Y2xhc3MgRGVidWdnZXJTY29wZTsKK2NsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIEV4ZWNTdGF0ZTsK
IHR5cGVkZWYgRXhlY1N0YXRlIENhbGxGcmFtZTsKIApAQCAtNjYsNyArNjcsNyBAQCBwdWJsaWM6
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGZ1bmN0aW9uTmFtZSgpIGNvbnN0OwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIFR5cGUgdHlwZSgpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTVmFsdWUgdGhpc1ZhbHVlKCkgY29uc3Q7Ci0gICAgSlNWYWx1ZSBldmFsdWF0ZShjb25z
dCBTdHJpbmcmLCBKU1ZhbHVlJiBleGNlcHRpb24pOworICAgIEpTVmFsdWUgZXZhbHVhdGUoY29u
c3QgU3RyaW5nJiwgRXhjZXB0aW9uKiYpOwogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gISFtX2NhbGxGcmFtZTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgaW52YWxp
ZGF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdE1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTg1MjQ2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzksOSArMTM5LDkgQEAgRGVwcmVjYXRlZDo6U2NyaXB0T2JqZWN0
IEluamVjdGVkU2NyaXB0TQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY3Jp
cHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIEpTVmFsdWUgZ2xvYmFsVGhpc1Zh
bHVlID0gc2NyaXB0U3RhdGUtPmdsb2JhbFRoaXNWYWx1ZSgpOwogCi0gICAgSlNWYWx1ZSBldmFs
dWF0aW9uRXhjZXB0aW9uOworICAgIEV4Y2VwdGlvbiogZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAg
ICBJbnNwZWN0b3JFdmFsdWF0ZUhhbmRsZXIgZXZhbHVhdGVIYW5kbGVyID0gbV9lbnZpcm9ubWVu
dC5ldmFsdWF0ZUhhbmRsZXIoKTsKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBldmFsdWF0
ZUhhbmRsZXIoc2NyaXB0U3RhdGUsIHNvdXJjZUNvZGUsIGdsb2JhbFRoaXNWYWx1ZSwgJmV2YWx1
YXRpb25FeGNlcHRpb24pOworICAgIEpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGV2YWx1YXRlSGFu
ZGxlcihzY3JpcHRTdGF0ZSwgc291cmNlQ29kZSwgZ2xvYmFsVGhpc1ZhbHVlLCBldmFsdWF0aW9u
RXhjZXB0aW9uKTsKICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJu
IERlcHJlY2F0ZWQ6OlNjcmlwdE9iamVjdCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9ubWVudC5oCShyZXZpc2lv
biAxODUyNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckVu
dmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMywxNCBAQCBjbGFzcyBTdG9w
d2F0Y2g7CiB9CiAKIG5hbWVzcGFjZSBKU0MgeworY2xhc3MgRXhjZXB0aW9uOwogY2xhc3MgU291
cmNlQ29kZTsKIH0KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgSlNDOjpKU1Zh
bHVlICgqSW5zcGVjdG9yRnVuY3Rpb25DYWxsSGFuZGxlcikoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29u
c3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0
IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pOwotdHlwZWRlZiBK
U0M6OkpTVmFsdWUgKCpJbnNwZWN0b3JFdmFsdWF0ZUhhbmRsZXIpKEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgSlNDOjpTb3VyY2VDb2RlJiwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpKU1Zh
bHVlKiBleGNlcHRpb24pOwordHlwZWRlZiBKU0M6OkpTVmFsdWUgKCpJbnNwZWN0b3JGdW5jdGlv
bkNhbGxIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9u
T2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiBjYWxs
RGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBK
U0M6OkV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKTsKK3R5cGVkZWYgSlNDOjpKU1ZhbHVl
ICgqSW5zcGVjdG9yRXZhbHVhdGVIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6
U291cmNlQ29kZSYsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RXhjZXB0aW9uKiYgcmV0
dXJuZWRFeGNlcHRpb24pOwogCiBjbGFzcyBJbnNwZWN0b3JFbnZpcm9ubWVudCB7CiBwdWJsaWM6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAxODUyNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCiAjaW5jbHVkZSAiQ29uc29sZU1lc3NhZ2UuaCIK
ICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIK
ICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlw
dE1hbmFnZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5oIgpAQCAtMTg4LDcgKzE4OSw3
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjoKICNlbmRpZgogfQog
Ci12b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVwb3J0QVBJRXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb24pCit2b2lkIEpTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVwb3J0QVBJRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAgICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlv
bkV4Y2VwdGlvbihleGNlcHRpb24pKQogICAgICAgICByZXR1cm47CkBAIC0yMDEsNyArMjAyLDcg
QEAgdm9pZCBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6OgogCiAgICAgLy8gRklY
TUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3RvcjogU2hvdWxkIG5v
dCBldmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKICAgICAvLyBJZiB0aGlz
IGlzIGEgY3VzdG9tIGV4Y2VwdGlvbiBvYmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5
IGFuZCBnZXQgYSBuaWNlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4K
LSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLT52YWx1ZSgpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwog
CiAgICAgaWYgKEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6bG9nVG9TeXN0ZW1Db25zb2xl
KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmpl
Y3RJbnNwZWN0b3JDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaAkocmV2aXNp
b24gMTg1MjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9i
amVjdEluc3BlY3RvckNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBA
QCBjbGFzcyBTdG9wd2F0Y2g7CiAKIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ29uc29sZUNsaWVu
dDsKK2NsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTR2xvYmFsT2Jq
ZWN0OwogY2xhc3MgSlNWYWx1ZTsKQEAgLTgxLDcgKzgyLDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0SW5jbHVkZXNOYXRpdmVDYWxsU3RhY2tXaGVuUmVwb3J0aW5nRXhjZXB0aW9ucyhib29sIGlu
Y2x1ZGVzTmF0aXZlQ2FsbFN0YWNrKSB7IG1faW5jbHVkZU5hdGl2ZUNhbGxTdGFja1dpdGhFeGNl
cHRpb25zID0gaW5jbHVkZXNOYXRpdmVDYWxsU3RhY2s7IH0KIAogICAgIHZvaWQgcGF1c2UoKTsK
LSAgICB2b2lkIHJlcG9ydEFQSUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSBleGNlcHRpb24pOworICAgIHZvaWQgcmVwb3J0QVBJRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFeGNlcHRpb24qKTsKIAogICAgIEpTQzo6Q29uc29sZUNsaWVudCogY29uc29sZUNs
aWVudCgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pT
R2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuaAko
cmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0ds
b2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0
LDcgQEAgcHJpdmF0ZToKICAgICAvLyBOT1RFOiBDdXJyZW50bHkgYWxsIGV4Y2VwdGlvbnMgYXJl
IHJlcG9ydGVkIGF0IHRoZSBBUEkgYm91bmRhcnkgdGhyb3VnaCByZXBvcnRBUElFeGNlcHRpb24u
CiAgICAgLy8gVW50aWwgYSB0aW1lIGNvbWVzIHdoZXJlIGFuIGV4Y2VwdGlvbiBjYW4gYmUgY2F1
c2VkIG91dHNpZGUgb2YgdGhlIEFQSSAoZS5nLiBzZXRUaW1lb3V0CiAgICAgLy8gb3Igc29tZSBv
dGhlciBhc3luYyBvcGVyYXRpb24gaW4gYSBwdXJlIEpTQ29udGV4dCkgd2UgY2FuIGlnbm9yZSBl
eGNlcHRpb25zIHJlcG9ydGVkIGhlcmUuCi0gICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSkgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAg
dmlydHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0
aW9uKikgY29uc3Qgb3ZlcnJpZGUgeyB9CiAKICAgICBMaXN0ZW5lclNldCBtX2xpc3RlbmVyczsK
ICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0JiBtX2dsb2JhbE9iamVjdDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxG
cmFtZS5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaW5jbHVkZSAiRGVidWdnZXJTY29wZS5oIgogI2luY2x1ZGUgIkVycm9yLmgi
CisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1
ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90
b3R5cGUuaCIKQEAgLTc1LDcgKzc2LDcgQEAgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjp+SlNKYXZh
U2NyaXB0Q2FsbAogCiBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGUoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIEV4Y2VwdGlvbiog
ZXhjZXB0aW9uOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbCgpLmV2YWx1YXRlKGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgZXhjZXB0aW9uKTsKICAgICBp
ZiAoZXhjZXB0aW9uKQogICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4
Y2VwdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0phdmFTY3Jp
cHRDYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuaAkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIHZt
RW50cnlHbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLT52
bUVudHJ5R2xvYmFsT2JqZWN0KCk7IH0KIAogICAgIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLT50aGlzVmFsdWUoKTsgfQotICAgIEpT
Qzo6SlNWYWx1ZSBldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNDOjpKU1ZhbHVlJiBl
eGNlcHRpb24pIGNvbnN0ICB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0ZShz
Y3JpcHQsIGV4Y2VwdGlvbik7IH0KKyAgICBKU0M6OkpTVmFsdWUgZXZhbHVhdGUoY29uc3QgU3Ry
aW5nJiBzY3JpcHQsIEpTQzo6RXhjZXB0aW9uKiYgZXhjZXB0aW9uKSBjb25zdCAgeyByZXR1cm4g
bV9kZWJ1Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoc2NyaXB0LCBleGNlcHRpb24pOyB9CiAKIHBy
aXZhdGU6CiAgICAgSmF2YVNjcmlwdENhbGxGcmFtZShQYXNzUmVmUHRyPEpTQzo6RGVidWdnZXJD
YWxsRnJhbWU+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0
Q2FsbFN0YWNrRmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAkocmV2aXNpb24gMTg1MjQ2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlNjcmlwdENh
bGxTdGFja0ZhY3RvcnkuaCIKIAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkV4
Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgiCkBAIC0xMjgsMTAgKzEyOSwxMCBAQCBz
dGF0aWMgdm9pZCBleHRyYWN0U291cmNlSW5mb3JtYXRpb25Gcm9tCiAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKIH0KIAotUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlw
dENhbGxTdGFja0Zyb21FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSYgZXhjZXB0aW9uLCBzaXplX3QgbWF4U3RhY2tTaXplKQorUGFzc1JlZlB0cjxTY3JpcHRDYWxs
U3RhY2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24sIHNpemVfdCBtYXhTdGFja1NpemUpCiB7
CiAgICAgVmVjdG9yPFNjcmlwdENhbGxGcmFtZT4gZnJhbWVzOwotICAgIFJlZkNvdW50ZWRBcnJh
eTxTdGFja0ZyYW1lPiBzdGFja1RyYWNlID0gZXhlYy0+dm0oKS5leGNlcHRpb25TdGFjaygpOwor
ICAgIFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPiBzdGFja1RyYWNlID0gZXhjZXB0aW9uLT5z
dGFjaygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhY2tUcmFjZS5zaXplKCkgJiYg
aSA8IG1heFN0YWNrU2l6ZTsgaSsrKSB7CiAgICAgICAgIHVuc2lnbmVkIGxpbmU7CiAgICAgICAg
IHVuc2lnbmVkIGNvbHVtbjsKQEAgLTE0MSw4ICsxNDIsOCBAQCBQYXNzUmVmUHRyPFNjcmlwdENh
bGxTdGFjaz4gY3JlYXRlU2NyaXB0CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gZ2V0dGlu
ZyBhdCBsZWFzdCB0aGUgbGluZSBhbmQgc291cmNlVVJMIGZyb20gdGhlIGV4Y2VwdGlvbiBvYmpl
Y3QgaWYgaXQgaGFzIHZhbHVlcyBhbmQgdGhlIGV4Y2VwdGlvblN0YWNrIGRvZXNuJ3QuCi0gICAg
SlNPYmplY3QqIGV4Y2VwdGlvbk9iamVjdCA9IGV4Y2VwdGlvbi50b09iamVjdChleGVjKTsKLSAg
ICBpZiAoZXhjZXB0aW9uLmlzT2JqZWN0KCkpIHsKKyAgICBpZiAoZXhjZXB0aW9uLT52YWx1ZSgp
LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbk9iamVjdCA9IGV4Y2Vw
dGlvbi0+dmFsdWUoKS50b09iamVjdChleGVjKTsKICAgICAgICAgaW50IGxpbmVOdW1iZXI7CiAg
ICAgICAgIGludCBjb2x1bW5OdW1iZXI7CiAgICAgICAgIFN0cmluZyBleGNlcHRpb25Tb3VyY2VV
Ukw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFj
a0ZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaAkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKK2NsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpT
VmFsdWU7CiB9CkBAIC00Nyw3ICs0OCw3IEBAIGNsYXNzIFNjcmlwdENhbGxTdGFjazsKIC8vIEZJ
WE1FOiBUaGUgc3VidGxlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlc2Ugc2hvdWxkIGJlIGVsaW1p
bmF0ZWQuCiBKU19FWFBPUlRfUFJJVkFURSBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY3Jl
YXRlU2NyaXB0Q2FsbFN0YWNrKEpTQzo6RXhlY1N0YXRlKiwgc2l6ZV90IG1heFN0YWNrU2l6ZSk7
CiBKU19FWFBPUlRfUFJJVkFURSBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2Ny
aXB0Q2FsbFN0YWNrRm9yQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSosIHNpemVfdCBtYXhTdGFja1Np
emUpOwotSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0
ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUmIGV4Y2VwdGlvbiwgc2l6ZV90IG1heFN0YWNrU2l6ZSk7CitKU19FWFBPUlRfUFJJVkFURSBQ
YXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKiwgc2l6ZV90IG1heFN0YWNrU2l6
ZSk7CiBKU19FWFBPUlRfUFJJVkFURSBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gY3JlYXRl
U2NyaXB0QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgc2tpcEFyZ3VtZW50Q291
bnQpOwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lv
biAxODUyNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVn
U2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAi
RGVidWdnZXJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJEZWJ1Z2dlclNjb3BlLmgiCisjaW5jbHVk
ZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCiAjaW5j
bHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgpAQCAtOTMs
NyArOTQsNyBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpldmFsdWF0ZUJyZWFrcG9pCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlRXZh
bHVhdGU6IHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgICAgIEV4Y2VwdGlvbiog
ZXhjZXB0aW9uOwogICAgICAgICBkZWJ1Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoYnJlYWtwb2lu
dEFjdGlvbi5kYXRhLCBleGNlcHRpb24pOwogICAgICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAg
ICAgICAgcmVwb3J0RXhjZXB0aW9uKGRlYnVnZ2VyQ2FsbEZyYW1lLT5leGVjKCksIGV4Y2VwdGlv
bik7CkBAIC0xMDMsMTMgKzEwNCwxMyBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpldmFsdWF0
ZUJyZWFrcG9pCiAgICAgICAgIGRpc3BhdGNoQnJlYWtwb2ludEFjdGlvblNvdW5kKGRlYnVnZ2Vy
Q2FsbEZyYW1lLT5leGVjKCksIGJyZWFrcG9pbnRBY3Rpb24uaWRlbnRpZmllcik7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgU2NyaXB0QnJlYWtwb2ludEFjdGlvblR5cGVQcm9iZTogewotICAg
ICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKGJyZWFr
cG9pbnRBY3Rpb24uZGF0YSwgZXhjZXB0aW9uKTsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAg
ICAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihkZWJ1Z2dlckNhbGxGcmFtZS0+ZXhlYygpLCBleGNl
cHRpb24pOwogICAgICAgICAKICAgICAgICAgSlNDOjpFeGVjU3RhdGUqIHN0YXRlID0gZGVidWdn
ZXJDYWxsRnJhbWUtPnNjb3BlKCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAg
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHdyYXBwZWRSZXN1bHQgPSBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZShzdGF0ZS0+dm0oKSwgZXhjZXB0aW9uID8gZXhjZXB0aW9uIDogcmVzdWx0KTsK
KyAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgd3JhcHBlZFJlc3VsdCA9IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlKHN0YXRlLT52bSgpLCBleGNlcHRpb24gPyBleGNlcHRpb24tPnZhbHVl
KCkgOiByZXN1bHQpOwogICAgICAgICBkaXNwYXRjaEJyZWFrcG9pbnRBY3Rpb25Qcm9iZShzdGF0
ZSwgYnJlYWtwb2ludEFjdGlvbiwgd3JhcHBlZFJlc3VsdCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTMwMiw3ICszMDMsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVCcmVh
a3BvaW50CiAgICAgfQogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVFeGNlcHRp
b25JbkJyZWFrcG9pbnRDb25kaXRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSBleGNlcHRpb24pIGNvbnN0Cit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVFeGNlcHRp
b25JbkJyZWFrcG9pbnRDb25kaXRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0
aW9uKiBleGNlcHRpb24pIGNvbnN0CiB7CiAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2Vw
dGlvbik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERl
YnVnU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9TY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAxODUyNDYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc5LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZShK
U0M6OkpTR2xvYmFsT2JqZWN0KikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBydW5FdmVudExvb3BX
aGlsZVBhdXNlZCgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50U2NyaXB0KEpTQzo6
RXhlY1N0YXRlKikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qKSBjb25z
dCA9IDA7CiAKICAgICBib29sIGV2YWx1YXRlQnJlYWtwb2ludEFjdGlvbihjb25zdCBTY3JpcHRC
cmVha3BvaW50QWN0aW9uJik7CiAKQEAgLTEwMSw3ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBzb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlNvdXJjZVByb3Zp
ZGVyKiwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1zZykgb3ZlcnJpZGUgZmlu
YWw7CiAgICAgdmlydHVhbCBib29sIG5lZWRQYXVzZUhhbmRsaW5nKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKSBvdmVycmlkZSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIGhh
bmRsZUJyZWFrcG9pbnRIaXQoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6QnJlYWtw
b2ludCYpIG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25J
bkJyZWFrcG9pbnRDb25kaXRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhjZXB0
aW9uKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXhjZXB0
aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24q
KSBjb25zdCBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGF1c2UoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RGVidWdnZXI6OlJlYXNvbkZvclBhdXNlKSBvdmVycmlk
ZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2
ZW50cygpIG92ZXJyaWRlIGZpbmFsOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxODUyNDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDExICsyNCwxMSBAQAogI2RlZmluZSBDYWxsRnJhbWVfaAogCiAjaW5jbHVkZSAiQWJzdHJhY3RQ
Qy5oIgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNTdGFjay5oIgogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCiAjaW5jbHVkZSAi
U3RhY2tWaXNpdG9yLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJWTUVudHJ5UmVjb3Jk
LmgiCiAKIG5hbWVzcGFjZSBKU0MgIHsKQEAgLTc1LDEzICs3NSw5IEBAIG5hbWVzcGFjZSBKU0Mg
IHsKICAgICAgICAgLy8gQnV0IHRoZXkncmUgdXNlZCBpbiBtYW55IHBsYWNlcyBpbiBsZWdhY3kg
Y29kZSwgc28gdGhleSdyZSBub3QgZ29pbmcgYXdheSBhbnkgdGltZSBzb29uLgogCiAgICAgICAg
IHZvaWQgY2xlYXJFeGNlcHRpb24oKSB7IHZtKCkuY2xlYXJFeGNlcHRpb24oKTsgfQotICAgICAg
ICB2b2lkIGNsZWFyU3VwcGxlbWVudGFyeUV4Y2VwdGlvbkluZm8oKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB2bSgpLmNsZWFyRXhjZXB0aW9uU3RhY2soKTsKLSAgICAgICAgfQogCi0gICAgICAg
IEpTVmFsdWUgZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gdm0oKS5leGNlcHRpb24oKTsgfQot
ICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuICF2bSgpLmV4Y2VwdGlv
bigpLmlzRW1wdHkoKTsgfQorICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsg
cmV0dXJuIHZtKCkuZXhjZXB0aW9uKCk7IH0KKyAgICAgICAgYm9vbCBoYWRFeGNlcHRpb24oKSBj
b25zdCB7IHJldHVybiAhIXZtKCkuZXhjZXB0aW9uKCk7IH0KIAogICAgICAgICBBdG9taWNTdHJp
bmdUYWJsZSogYXRvbWljU3RyaW5nVGFibGUoKSBjb25zdCB7IHJldHVybiB2bSgpLmF0b21pY1N0
cmluZ1RhYmxlKCk7IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5
TmFtZXMoKSBjb25zdCB7IHJldHVybiAqdm0oKS5wcm9wZXJ0eU5hbWVzOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJl
dmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJE
ZWJ1Z2dlckNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkVycm9ySW5zdGFuY2UuaCIKICNpbmNsdWRl
ICJFdmFsQ29kZUNhY2hlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkpT
QXJyYXkuaCIKQEAgLTQzNSw3ICs0MzYsNyBAQCBzdGF0aWMgYm9vbCB1bndpbmRDYWxsRnJhbWUo
U3RhY2tWaXNpdG9yCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxs
RnJhbWUoKTsKICAgICBpZiAoRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVudHJ5
R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsKLSAgICAgICAgQ2xlYXJFeGNlcHRpb25TY29w
ZSBzY29wZSgmY2FsbEZyYW1lLT52bSgpKTsKKyAgICAgICAgU3VzcGVuZEV4Y2VwdGlvblNjb3Bl
IHNjb3BlKCZjYWxsRnJhbWUtPnZtKCkpOwogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbEZyYW1lLT5jYWxsZWUoKSkpCiAgICAgICAgICAgICBkZWJ1Z2dlci0+cmV0
dXJuRXZlbnQoY2FsbEZyYW1lKTsKICAgICAgICAgZWxzZQpAQCAtNTgzLDkgKzU4NCw5IEBAIEpT
U3RyaW5nKiBJbnRlcnByZXRlcjo6c3RhY2tUcmFjZUFzU3RyaW4KICAgICByZXR1cm4ganNTdHJp
bmcoJmV4ZWMtPnZtKCksIGJ1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKLWNsYXNzIEdldEV4Y2Vw
dGlvbkhhbmRsZXJGdW5jdG9yIHsKK2NsYXNzIEdldENhdGNoSGFuZGxlckZ1bmN0b3IgewogcHVi
bGljOgotICAgIEdldEV4Y2VwdGlvbkhhbmRsZXJGdW5jdG9yKCkKKyAgICBHZXRDYXRjaEhhbmRs
ZXJGdW5jdG9yKCkKICAgICAgICAgOiBtX2hhbmRsZXIoMCkKICAgICB7CiAgICAgfQpAQCAtNTk5
LDcgKzYwMCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNv
bnRpbnVlOwogCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdmlzaXRvci0+Ynl0
ZWNvZGVPZmZzZXQoKTsKLSAgICAgICAgbV9oYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9y
Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBtX2hhbmRsZXIgPSBjb2Rl
QmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgQ29kZUJsb2Nr
OjpSZXF1aXJlZEhhbmRsZXI6OkNhdGNoSGFuZGxlcik7CiAgICAgICAgIGlmIChtX2hhbmRsZXIp
CiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwogCkBAIC02NDksMTEgKzY1
MCwxMiBAQCBwcml2YXRlOgogICAgIEhhbmRsZXJJbmZvKiYgbV9oYW5kbGVyOwogfTsKIAotTkVW
RVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZNRW50cnlGcmFtZSom
IHZtRW50cnlGcmFtZSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBKU1ZhbHVlJiBleGNlcHRpb25W
YWx1ZSkKK05FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChWTUVu
dHJ5RnJhbWUqJiB2bUVudHJ5RnJhbWUsIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9u
KiBleGNlcHRpb24pCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwogICAgIGJvb2wgaXNUZXJtaW5hdGlvbiA9IGZhbHNlOwogCisgICAgSlNWYWx1
ZSBleGNlcHRpb25WYWx1ZSA9IGV4Y2VwdGlvbi0+dmFsdWUoKTsKICAgICBBU1NFUlQoIWV4Y2Vw
dGlvblZhbHVlLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFleGNlcHRpb25WYWx1ZS5pc0NlbGwo
KSB8fCBleGNlcHRpb25WYWx1ZS5hc0NlbGwoKSk7CiAgICAgLy8gVGhpcyBzaG91bGRuJ3QgYmUg
cG9zc2libGUgKGhlbmNlIHRoZSBhc3NlcnRpb25zKSwgYnV0IHdlJ3JlIGFscmVhZHkgaW4gdGhl
IHNsb3dlc3Qgb2YKQEAgLTY2MiwzMiArNjY0LDM1IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5m
byogSW50ZXJwcmV0ZXI6OnUKICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBqc051bGwoKTsKIAog
ICAgIGlmIChleGNlcHRpb25WYWx1ZS5pc09iamVjdCgpKQotICAgICAgICBpc1Rlcm1pbmF0aW9u
ID0gaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGFzT2JqZWN0KGV4Y2VwdGlvblZhbHVl
KSk7CisgICAgICAgIGlzVGVybWluYXRpb24gPSBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRp
b24oZXhjZXB0aW9uKTsKIAotICAgIEFTU0VSVChjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uU3Rh
Y2soKS5zaXplKCkpOworICAgIEFTU0VSVChjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKCkgJiYg
Y2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbigpLT5zdGFjaygpLnNpemUoKSk7CiAKICAgICBEZWJ1
Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+ZGVidWdn
ZXIoKTsKLSAgICBpZiAoZGVidWdnZXIgJiYgZGVidWdnZXItPm5lZWRzRXhjZXB0aW9uQ2FsbGJh
Y2tzKCkpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBjbGVhciB0aGUgZXhjZXB0aW9uIGFuZCB0
aGUgZXhjZXB0aW9uIHN0YWNrIGhlcmUgaW4gb3JkZXIgdG8gc2VlIGlmIGEgbmV3IGV4Y2VwdGlv
biBoYXBwZW5zLgorICAgIGlmIChkZWJ1Z2dlciAmJiBkZWJ1Z2dlci0+bmVlZHNFeGNlcHRpb25D
YWxsYmFja3MoKSAmJiAhZXhjZXB0aW9uLT5kaWROb3RpZnlJbnNwZWN0b3JPZlRocm93KCkpIHsK
KyAgICAgICAgLy8gV2UgbmVlZCB0byBjbGVhciB0aGUgZXhjZXB0aW9uIGhlcmUgaW4gb3JkZXIg
dG8gc2VlIGlmIGEgbmV3IGV4Y2VwdGlvbiBoYXBwZW5zLgogICAgICAgICAvLyBBZnRlcndhcmRz
LCB0aGUgdmFsdWVzIGFyZSBwdXQgYmFjayB0byBjb250aW51ZSBwcm9jZXNzaW5nIHRoaXMgZXJy
b3IuCi0gICAgICAgIENsZWFyRXhjZXB0aW9uU2NvcGUgc2NvcGUoJmNhbGxGcmFtZS0+dm0oKSk7
CisgICAgICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZSBzY29wZSgmY2FsbEZyYW1lLT52bSgpKTsK
ICAgICAgICAgLy8gVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBpZiB0aGUgZGVidWdnZXIgaXMgZW5h
YmxlZCB0aGVuIHRoZXJlIGlzIG5vIGlubGluaW5nLgogICAgICAgICAvLyBJZiB0aGF0IGFzc3Vt
cHRpb24gdHVybnMgb3V0IHRvIGJlIGZhbHNlIHRoZW4gd2UnbGwgaWdub3JlIHRoZSBpbmxpbmVk
IGNhbGwKICAgICAgICAgLy8gZnJhbWVzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzU0CiAKLSAgICAgICAgYm9vbCBoYXNIYW5kbGVyOwor
ICAgICAgICBib29sIGhhc0NhdGNoSGFuZGxlcjsKICAgICAgICAgaWYgKGlzVGVybWluYXRpb24p
Ci0gICAgICAgICAgICBoYXNIYW5kbGVyID0gZmFsc2U7CisgICAgICAgICAgICBoYXNDYXRjaEhh
bmRsZXIgPSBmYWxzZTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBHZXRFeGNlcHRpb25I
YW5kbGVyRnVuY3RvciBmdW5jdG9yOworICAgICAgICAgICAgR2V0Q2F0Y2hIYW5kbGVyRnVuY3Rv
ciBmdW5jdG9yOwogICAgICAgICAgICAgY2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOwotICAg
ICAgICAgICAgaGFzSGFuZGxlciA9ICEhZnVuY3Rvci5oYW5kbGVyKCk7CisgICAgICAgICAgICBI
YW5kbGVySW5mbyogaGFuZGxlciA9IGZ1bmN0b3IuaGFuZGxlcigpOworICAgICAgICAgICAgQVNT
RVJUKCFoYW5kbGVyIHx8IGhhbmRsZXItPmlzQ2F0Y2hIYW5kbGVyKCkpOworICAgICAgICAgICAg
aGFzQ2F0Y2hIYW5kbGVyID0gISFoYW5kbGVyOwogICAgICAgICB9CiAKLSAgICAgICAgZGVidWdn
ZXItPmV4Y2VwdGlvbihjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCBoYXNIYW5kbGVyKTsKKyAg
ICAgICAgZGVidWdnZXItPmV4Y2VwdGlvbihjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCBoYXND
YXRjaEhhbmRsZXIpOwogICAgICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkp
OwogICAgIH0KKyAgICBleGNlcHRpb24tPnNldERpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3coKTsK
IAogICAgIC8vIENhbGN1bGF0ZSBhbiBleGNlcHRpb24gaGFuZGxlciB2UEMsIHVud2luZGluZyBj
YWxsIGZyYW1lcyBhcyBuZWNlc3NhcnkuCiAgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSAwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmgJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCwyMCArOTgsMjAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZXhwcmVzc2lvbkluZm8oaW50JiBkaXZvdCwgaW50JiBz
dGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29s
dW1uKTsKICAgICB9OwogCi0gICAgY2xhc3MgQ2xlYXJFeGNlcHRpb25TY29wZSB7CisgICAgY2xh
c3MgU3VzcGVuZEV4Y2VwdGlvblNjb3BlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENsZWFyRXhj
ZXB0aW9uU2NvcGUoVk0qIHZtKTogbV92bSh2bSkKKyAgICAgICAgU3VzcGVuZEV4Y2VwdGlvblNj
b3BlKFZNKiB2bSkKKyAgICAgICAgICAgIDogbV92bSh2bSkKICAgICAgICAgewotICAgICAgICAg
ICAgdm0tPmdldEV4Y2VwdGlvbkluZm8ob2xkRXhjZXB0aW9uLCBvbGRFeGNlcHRpb25TdGFjayk7
CisgICAgICAgICAgICBvbGRFeGNlcHRpb24gPSB2bS0+ZXhjZXB0aW9uKCk7CiAgICAgICAgICAg
ICB2bS0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgfQotICAgICAgICB+Q2xlYXJFeGNlcHRp
b25TY29wZSgpCisgICAgICAgIH5TdXNwZW5kRXhjZXB0aW9uU2NvcGUoKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBtX3ZtLT5zZXRFeGNlcHRpb25JbmZvKG9sZEV4Y2VwdGlvbiwgb2xkRXhjZXB0
aW9uU3RhY2spOworICAgICAgICAgICAgbV92bS0+c2V0RXhjZXB0aW9uKG9sZEV4Y2VwdGlvbik7
CiAgICAgICAgIH0KICAgICBwcml2YXRlOgotICAgICAgICBKU0M6OkpTVmFsdWUgb2xkRXhjZXB0
aW9uOwotICAgICAgICBSZWZDb3VudGVkQXJyYXk8SlNDOjpTdGFja0ZyYW1lPiBvbGRFeGNlcHRp
b25TdGFjazsKKyAgICAgICAgRXhjZXB0aW9uKiBvbGRFeGNlcHRpb247CiAgICAgICAgIFZNKiBt
X3ZtOwogICAgIH07CiAgICAgCkBAIC0yMTUsNyArMjE1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIAogICAgICAgICBTYW1wbGluZ1Rvb2wqIHNhbXBsZXIoKSB7IHJldHVybiBtX3NhbXBs
ZXIuZ2V0KCk7IH0KIAotICAgICAgICBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIHVud2luZChW
TUVudHJ5RnJhbWUqJiwgQ2FsbEZyYW1lKiYsIEpTVmFsdWUmKTsKKyAgICAgICAgTkVWRVJfSU5M
SU5FIEhhbmRsZXJJbmZvKiB1bndpbmQoVk1FbnRyeUZyYW1lKiYsIENhbGxGcmFtZSomLCBFeGNl
cHRpb24qKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgZGVidWcoQ2FsbEZyYW1lKiwgRGVi
dWdIb29rSUQpOwogICAgICAgICBKU1N0cmluZyogc3RhY2tUcmFjZUFzU3RyaW5nKEV4ZWNTdGF0
ZSosIFZlY3RvcjxTdGFja0ZyYW1lPik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIzLDcgKzIyMyw3IEBAIEFzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmUK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHJlc3VsdCA9IGJyYW5jaFRlc3Q2NChraW5kID09IE5v
cm1hbEV4Y2VwdGlvbkNoZWNrID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRlQWRkcmVzcyh2bSgp
LT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBy
ZXN1bHQgPSBicmFuY2gzMihraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gTm90RXF1YWwg
OiBFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtKCktPmFk
ZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICByZXN1bHQg
PSBicmFuY2gzMihraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gTm90RXF1YWwgOiBFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwgVHJ1c3RlZElt
bTMyKDApKTsKICNlbmRpZgogICAgIAogICAgIGlmICh3aWR0aCA9PSBOb3JtYWxKdW1wV2lkdGgp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHJl
dmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE2ICs0MCwxNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotdm9pZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUsIEpT
VmFsdWUgZXhjZXB0aW9uVmFsdWUpCit2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3Rh
dGUqIGNhbGxGcmFtZSkKIHsKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAg
ICAgICAgZGF0YUxvZygiSW4gY2FsbCBmcmFtZSAiLCBSYXdQb2ludGVyKGNhbGxGcmFtZSksICIg
Zm9yIGNvZGUgYmxvY2sgIiwgKmNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICJcbiIpOwogICAgICAg
ICBDUkFTSCgpOwogICAgIH0KICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb25WYWx1
ZSk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSB2bS0+ZXhjZXB0aW9uKCk7CisgICAgUkVM
RUFTRV9BU1NFUlQoZXhjZXB0aW9uKTsKICAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9
IHZtLT50b3BWTUVudHJ5RnJhbWU7Ci0gICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSB2bS0+aW50
ZXJwcmV0ZXItPnVud2luZCh2bUVudHJ5RnJhbWUsIGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUp
OyAvLyBUaGlzIG1heSB1cGRhdGUgdm1FbnRyeUZyYW1lIGFuZCBjYWxsRnJhbWUuCisgICAgSGFu
ZGxlckluZm8qIGhhbmRsZXIgPSB2bS0+aW50ZXJwcmV0ZXItPnVud2luZCh2bUVudHJ5RnJhbWUs
IGNhbGxGcmFtZSwgZXhjZXB0aW9uKTsgLy8gVGhpcyBtYXkgdXBkYXRlIHZtRW50cnlGcmFtZSBh
bmQgY2FsbEZyYW1lLgogCiAgICAgdm9pZCogY2F0Y2hSb3V0aW5lOwogICAgIEluc3RydWN0aW9u
KiBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRFeGNlcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRFeGNlcHRpb25zLmgJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgVk07CiAKLXZvaWQg
Z2VuZXJpY1Vud2luZChWTSosIEV4ZWNTdGF0ZSosIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUpOwor
dm9pZCBnZW5lcmljVW53aW5kKFZNKiwgRXhlY1N0YXRlKik7CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCShyZXZpc2lvbiAxODUyNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1
ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIK
ICNpbmNsdWRlICJKU0NlbGwuaCIKQEAgLTk3LDcgKzk4LDcgQEAgSklUOjpDb2RlUmVmIEpJVDo6
cHJpdmF0ZUNvbXBpbGVDVElOYXRpdgogI2VuZGlmIC8vIENQVShYODYpCiAKICAgICAvLyBDaGVj
ayBmb3IgYW4gZXhjZXB0aW9uCi0gICAgSnVtcCBzYXdFeGNlcHRpb24gPSBicmFuY2gzMihOb3RF
cXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5hZGRyZXNz
T2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSks
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7IAorICAgIEp1bXAgc2F3RXhj
ZXB0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyh2bS0+YWRkcmVzc09m
RXhjZXB0aW9uKCkpLCBUcnVzdGVkSW1tMzIoMCkpOwogCiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoKTsKICAgICAvLyBSZXR1cm4uCkBAIC04MjksMTMgKzgzMCwxOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VyCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICAvLyBOb3cgc3RvcmUg
dGhlIGV4Y2VwdGlvbiByZXR1cm5lZCBieSBvcGVyYXRpb25UaHJvdy4KLSAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qz
LCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlKCkucGF5
bG9hZCgpKSwgQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZSgpLnRhZygpKSwgQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNl
dCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSwgcmVnVDIpOworICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7CisKKyAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSk7
CiAKICAgICB1bnNpZ25lZCBleGNlcHRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgIGVtaXRTdG9yZShleGNlcHRpb24sIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdFN0
b3JlKGV4Y2VwdGlvbiwgcmVnVDEsIHJlZ1QyKTsKKworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qy
LCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMucGF5bG9hZCkpLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIEV4Y2Vw
dGlvbjo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSwgcmVnVDEpOworCisgICAgdW5zaWduZWQgdGhyb3duVmFsdWUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGVtaXRTdG9yZSh0aHJvd25WYWx1ZSwgcmVnVDEsIHJl
Z1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCShyZXZpc2lvbiAxODUyNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
QmFzaWNCbG9ja0xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJI
ZWFwLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKQEAg
LTUyOSw2ICs1MzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3Vy
CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1Qw
KTsKICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSks
IEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSkpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisKKyAgICBsb2Fk
NjQoQWRkcmVzcyhyZWdUMCwgRXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpKSwgcmVnVDApOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxOCw3ICsxOTE4LDcgQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93KEV4ZWNTdAogICAgIHZtLT50aHJvd0V4Y2Vw
dGlvbihleGVjLCBleGNlcHRpb25WYWx1ZSk7CiAKICAgICAvLyBSZXN1bHRzIHN0b3JlZCBvdXQt
b2YtYmFuZCBpbiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdywgdm0uY2FsbEZyYW1lRm9yVGhy
b3cgJiB2bS52bUVudHJ5RnJhbWVGb3JUaHJvdwotICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMs
IGV4Y2VwdGlvblZhbHVlKTsKKyAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKIH0KIAogdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBjZWxsKQpAQCAtMTk1NywxMSArMTk1Nyw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Jbml0R2xvYmFsQ28KIHZvaWQgSklUX09QRVJBVElPTiBsb29rdXBF
eGNlcHRpb25IYW5kbGVyKFZNKiB2bSwgRXhlY1N0YXRlKiBleGVjKQogewogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgSlNWYWx1ZSBleGNlcHRpb25W
YWx1ZSA9IHZtLT5leGNlcHRpb24oKTsKLSAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwotICAg
IAotICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKKyAgICBnZW5l
cmljVW53aW5kKHZtLCBleGVjKTsKICAgICBBU1NFUlQodm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRo
cm93KTsKIH0KIApAQCAtMTk3MiwxMSArMTk2OCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBsb29r
dXBFeGNlcHRpb25IYW5kbGUKICAgICBBU1NFUlQoY2FsbGVyRnJhbWUpOwogCiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyV2l0aFJlc3RvcmUgdHJhY2VyKHZtLCB2bUVudHJ5RnJhbWUsIGNhbGxl
ckZyYW1lKTsKLQotICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSB2bS0+ZXhjZXB0aW9uKCk7
Ci0gICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKLSAgICAKLSAgICBnZW5lcmljVW53aW5kKHZt
LCBjYWxsZXJGcmFtZSwgZXhjZXB0aW9uVmFsdWUpOworICAgIGdlbmVyaWNVbndpbmQodm0sIGNh
bGxlckZyYW1lKTsKICAgICBBU1NFUlQodm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKIH0K
IApAQCAtMTk4NCw4ICsxOTc2LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZNSGFu
ZGxlRXhjZQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywg
dm0tPmV4Y2VwdGlvbigpKTsKKyAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKIH0KIAogLy8g
VGhpcyBmdW5jdGlvbiAic2hvdWxkIiBqdXN0IHRha2UgdGhlIEV4ZWNTdGF0ZSosIGJ1dCBkb2lu
ZyBzbyB3b3VsZCBtYWtlIGl0IG1vcmUgZGlmZmljdWx0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAxODUyNDYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0OSw4ICszNDksOCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2
ZUZvckdlCiAjZWxzZQogICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIGV4Y2VwdGlvbkhhbmRsZXIg
PSBqaXQuYnJhbmNoMzIoCiAgICAgICAgIEpTSW50ZXJmYWNlSklUOjpOb3RFcXVhbCwKLSAgICAg
ICAgSlNJbnRlcmZhY2VKSVQ6OkFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIq
Pih2bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwKLSAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAgICAgIEpTSW50ZXJmYWNlSklU
OjpBYnNvbHV0ZUFkZHJlc3Modm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwKKyAgICAgICAgSlNJ
bnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMigwKSk7CiAjZW5kaWYKIAogICAgIGppdC5lbWl0RnVu
Y3Rpb25FcGlsb2d1ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
T2Zmc2V0c0V4dHJhY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgi
CiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAi
SGVhcC5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNzUsOCArMTM3NSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9wcm9maWxlX2QKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9oYW5kbGVfZXhjZXB0
aW9uKQogewogICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwotICAgIEFTU0VSVCh2bS5leGNl
cHRpb24oKSk7Ci0gICAgZ2VuZXJpY1Vud2luZCgmdm0sIGV4ZWMsIHZtLmV4Y2VwdGlvbigpKTsK
KyAgICBnZW5lcmljVW53aW5kKCZ2bSwgZXhlYyk7CiAgICAgTExJTlRfRU5EX0lNUEwoKTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNv
cHkpCkBAIC02OTMsNyArNjkzLDcgQEAgbWFjcm8gYnJhbmNoSWZFeGNlcHRpb24obGFiZWwpCiAg
ICAgbG9hZHAgQ2FsbGVlICsgUGF5bG9hZE9mZnNldFtjZnJdLCB0MwogICAgIGFuZHAgTWFya2Vk
QmxvY2tNYXNrLCB0MwogICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3dlYWtTZXQgKyBXZWFrU2V0
OjptX3ZtW3QzXSwgdDMKLSAgICBiaWVxIFZNOjptX2V4Y2VwdGlvbiArIFRhZ09mZnNldFt0M10s
IEVtcHR5VmFsdWVUYWcsIC5ub0V4Y2VwdGlvbgorICAgIGJ0aXogVk06Om1fZXhjZXB0aW9uW3Qz
XSwgLm5vRXhjZXB0aW9uCiAgICAgam1wIGxhYmVsCiAubm9FeGNlcHRpb246CiBlbmQKQEAgLTE5
NTIsMTUgKzE5NTIsMjAgQEAgX2xsaW50X29wX2NhdGNoOgogICAgIHJlc3RvcmVTdGFja1BvaW50
ZXJBZnRlckNhbGwoKQogCiAgICAgbG9hZGkgVk06OnRhcmdldEludGVycHJldGVyUENGb3JUaHJv
d1t0M10sIFBDCi0gICAgbG9hZGkgVk06Om1fZXhjZXB0aW9uICsgUGF5bG9hZE9mZnNldFt0M10s
IHQwCi0gICAgbG9hZGkgVk06Om1fZXhjZXB0aW9uICsgVGFnT2Zmc2V0W3QzXSwgdDEKLSAgICBz
dG9yZWkgMCwgVk06Om1fZXhjZXB0aW9uICsgUGF5bG9hZE9mZnNldFt0M10KLSAgICBzdG9yZWkg
RW1wdHlWYWx1ZVRhZywgVk06Om1fZXhjZXB0aW9uICsgVGFnT2Zmc2V0W3QzXQorICAgIGxvYWRp
IFZNOjptX2V4Y2VwdGlvblt0M10sIHQwCisgICAgc3RvcmVpIDAsIFZNOjptX2V4Y2VwdGlvblt0
M10KICAgICBsb2FkaSA0W1BDXSwgdDIKICAgICBzdG9yZWkgdDAsIFBheWxvYWRPZmZzZXRbY2Zy
LCB0MiwgOF0KKyAgICBzdG9yZWkgQ2VsbFRhZywgVGFnT2Zmc2V0W2NmciwgdDIsIDhdCisKKyAg
ICBsb2FkaSBFeGNlcHRpb246Om1fdmFsdWUgKyBUYWdPZmZzZXRbdDBdLCB0MQorICAgIGxvYWRp
IEV4Y2VwdGlvbjo6bV92YWx1ZSArIFBheWxvYWRPZmZzZXRbdDBdLCB0MAorICAgIGxvYWRpIDhb
UENdLCB0MgorICAgIHN0b3JlaSB0MCwgUGF5bG9hZE9mZnNldFtjZnIsIHQyLCA4XQogICAgIHN0
b3JlaSB0MSwgVGFnT2Zmc2V0W2NmciwgdDIsIDhdCisKICAgICB0cmFjZUV4ZWN1dGlvbigpICAj
IFRoaXMgbmVlZHMgdG8gYmUgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gY2xvYmJlciB0
MCwgdDEsIHQyLCB0MyBhYm92ZS4KLSAgICBkaXNwYXRjaCgyKQorICAgIGRpc3BhdGNoKDMpCiAK
IF9sbGludF9vcF9lbmQ6CiAgICAgdHJhY2VFeGVjdXRpb24oKQpAQCAtMjAzOCw3ICsyMDQzLDcg
QEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZgogICAgIGVuZAogICAg
IAogICAgIGZ1bmN0aW9uRXBpbG9ndWUoKQotICAgIGJpbmVxIFZNOjptX2V4Y2VwdGlvbiArIFRh
Z09mZnNldFt0M10sIEVtcHR5VmFsdWVUYWcsIC5oYW5kbGVFeGNlcHRpb24KKyAgICBidGlueiBW
TTo6bV9leGNlcHRpb25bdDNdLCAuaGFuZGxlRXhjZXB0aW9uCiAgICAgcmV0CiAKIC5oYW5kbGVF
eGNlcHRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTE4MjAsMTIgKzE4MjAsMTggQEAgX2xsaW50X29wX2NhdGNoOgogICAgIGxvYWRwIFZN
Ojp0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQwogICAgIHN1YnAgUEIsIFBDCiAg
ICAgcnNoaWZ0cCAzLCBQQworCiAgICAgbG9hZHEgVk06Om1fZXhjZXB0aW9uW3QzXSwgdDAKICAg
ICBzdG9yZXEgMCwgVk06Om1fZXhjZXB0aW9uW3QzXQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlv
bigxLCB0MikKICAgICBzdG9yZXEgdDAsIFtjZnIsIHQyLCA4XQorCisgICAgbG9hZHEgRXhjZXB0
aW9uOjptX3ZhbHVlW3QwXSwgdDMKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDIpCisg
ICAgc3RvcmVxIHQzLCBbY2ZyLCB0MiwgOF0KKwogICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBk
aXNwYXRjaCgyKQorICAgIGRpc3BhdGNoKDMpCiAKIAogX2xsaW50X29wX2VuZDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCShyZXZp
c2lvbiAxODUyNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1
Y3RvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODExLDEwICs4MTEsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBUcnlOb2RlOjpUcnlOb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFN0YXRlbWVudE5vZGUqIHRyeUJsb2NrLCBjb25zdCBJ
ZGVudGlmaWVyJiBleGNlcHRpb25JZGVudCwgU3RhdGVtZW50Tm9kZSogY2F0Y2hCbG9jaywgU3Rh
dGVtZW50Tm9kZSogZmluYWxseUJsb2NrKQorICAgIGlubGluZSBUcnlOb2RlOjpUcnlOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFN0YXRlbWVudE5vZGUqIHRyeUJsb2NrLCBj
b25zdCBJZGVudGlmaWVyJiB0aHJvd25WYWx1ZUlkZW50LCBTdGF0ZW1lbnROb2RlKiBjYXRjaEJs
b2NrLCBTdGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2spCiAgICAgICAgIDogU3RhdGVtZW50Tm9k
ZShsb2NhdGlvbikKICAgICAgICAgLCBtX3RyeUJsb2NrKHRyeUJsb2NrKQotICAgICAgICAsIG1f
ZXhjZXB0aW9uSWRlbnQoZXhjZXB0aW9uSWRlbnQpCisgICAgICAgICwgbV90aHJvd25WYWx1ZUlk
ZW50KHRocm93blZhbHVlSWRlbnQpCiAgICAgICAgICwgbV9jYXRjaEJsb2NrKGNhdGNoQmxvY2sp
CiAgICAgICAgICwgbV9maW5hbGx5QmxvY2soZmluYWxseUJsb2NrKQogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUxMSw3
ICsxNTExLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOwogCiAg
ICAgICAgIFN0YXRlbWVudE5vZGUqIG1fdHJ5QmxvY2s7Ci0gICAgICAgIGNvbnN0IElkZW50aWZp
ZXImIG1fZXhjZXB0aW9uSWRlbnQ7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1fdGhyb3du
VmFsdWVJZGVudDsKICAgICAgICAgU3RhdGVtZW50Tm9kZSogbV9jYXRjaEJsb2NrOwogICAgICAg
ICBTdGF0ZW1lbnROb2RlKiBtX2ZpbmFsbHlCbG9jazsKICAgICB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAkocmV2aXNpb24gMTg1MjQ2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FsbERh
dGEuaCIKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIK
ICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKQEAgLTM5
LDE1ICs0MCwxNSBAQCBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1CiAg
ICAgcmV0dXJuIGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGVDYWxsKGV4ZWMsIGFzT2JqZWN0
KGZ1bmN0aW9uT2JqZWN0KSwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MpOwog
fQogCi1KU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0
LCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgSlNWYWx1ZSogZXhjZXB0aW9uKQorSlNWYWx1
ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUg
Y2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MsIEV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKQogewogICAg
IEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNh
bGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
ewotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGV4ZWMt
PmV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlv
bigpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybmVkRXhjZXB0aW9u
ID0gbnVsbHB0cjsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmgJKHJl
dmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBBcmdMaXN0OworY2xhc3MgRXhjZXB0aW9uOwogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3Mg
RnVuY3Rpb25FeGVjdXRhYmxlOwogY2xhc3MgSlNPYmplY3Q7CkBAIC01OCw3ICs1OSw3IEBAIHVu
aW9uIENhbGxEYXRhIHsKIH07CiAKIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY2FsbChFeGVj
U3RhdGUqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEm
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotSlNfRVhQT1JUX1BSSVZBVEUg
SlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBl
LCBjb25zdCBDYWxsRGF0YSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiwgSlNW
YWx1ZSogZXhjZXB0aW9uKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY2FsbChFeGVjU3Rh
dGUqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYsIEV4Y2VwdGlvbiomIHJldHVybmVkRXhj
ZXB0aW9uKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAxODUyNDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvZGVQ
cm9maWxpbmcuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5o
IgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIK
ICNpbmNsdWRlICJKU0xvY2suaCIKQEAgLTYwLDE5ICs2MSwxOCBAQCBib29sIGNoZWNrU3ludGF4
KFZNJiB2bSwgY29uc3QgU291cmNlQ29kCiAgICAgICAgIEpTUGFyc2VyU3RyaWN0TW9kZTo6Tm90
U3RyaWN0LCBKU1BhcnNlckNvZGVUeXBlOjpQcm9ncmFtLCBlcnJvcik7CiB9CiAKLUpTVmFsdWUg
ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2VwdGlvbikKK0pTVmFsdWUgZXZhbHVh
dGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmF0b21pY1N0cmlu
Z1RhYmxlKCkgPT0gd3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOwogICAgIFJF
TEVBU0VfQVNTRVJUKCFleGVjLT52bSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKKyAgICByZXR1cm5l
ZEV4Y2VwdGlvbiA9IG51bGxwdHI7CiAKICAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291cmNl
KTsKIAogICAgIFByb2dyYW1FeGVjdXRhYmxlKiBwcm9ncmFtID0gUHJvZ3JhbUV4ZWN1dGFibGU6
OmNyZWF0ZShleGVjLCBzb3VyY2UpOwogICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBpZiAo
cmV0dXJuZWRFeGNlcHRpb24pCi0gICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb24gPSBleGVj
LT52bSgpLmV4Y2VwdGlvbigpOwotCisgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+
dm0oKS5leGNlcHRpb24oKTsKICAgICAgICAgZXhlYy0+dm0oKS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CkBAIC04Myw5ICs4Myw3IEBAIEpT
VmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCAKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUocHJvZ3JhbSwgZXhlYywgdGhpc09iaik7
CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgaWYgKHJldHVybmVk
RXhjZXB0aW9uKQotICAgICAgICAgICAgKnJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0
aW9uKCk7Ci0KKyAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsK
ICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxl
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBs
ZXRpb24uaAkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tcGxldGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw4IEBACiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKLSAgICAKKworY2xhc3MgRXhjZXB0
aW9uOwogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSlNTY29wZTsKIGNsYXNzIFBhcnNlckVycm9y
OwpAQCAtMzUsNyArMzYsMTIgQEAgY2xhc3MgVk07CiAKIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wg
Y2hlY2tTeW50YXgoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFyc2VyRXJyb3ImKTsKIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29k
ZSYsIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDApOwotSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBl
dmFsdWF0ZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBKU1ZhbHVlKCksIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDApOworSlNfRVhQT1JUX1BSSVZBVEUg
SlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIEV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKTsKK2lubGluZSBKU1ZhbHVl
IGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBKU1ZhbHVlKCkpCit7CisgICAgRXhjZXB0aW9uKiB1bnVzZWQ7
CisgICAgcmV0dXJuIGV2YWx1YXRlKGV4ZWMsIHNvdXJjZUNvZGUsIHRoaXNWYWx1ZSwgdW51c2Vk
KTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3IuaAkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBKU19FWFBP
UlRfUFJJVkFURSBKU09iamVjdCogdGhyb3dUeXBlRXJyCiBKU19FWFBPUlRfUFJJVkFURSBKU09i
amVjdCogdGhyb3dTeW50YXhFcnJvcihFeGVjU3RhdGUqKTsKIAogLy8gQ29udmVuaWVuY2Ugd3Jh
cHBlcnMsIHdyYXAgcmVzdWx0IGFzIGFuIEVuY29kZWRKU1ZhbHVlLgoraW5saW5lIHZvaWQgdGhy
b3dWTUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uKiBleGNlcHRpb24pIHsgZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOyB9CiBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgdGhyb3dWTUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBlcnJvcikgeyByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXJyb3Ip
KTsgfQogaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1UeXBlRXJyb3IoRXhlY1N0YXRlKiBl
eGVjKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYykpOyB9CiBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTVR5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dU
eXBlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlKSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKKworI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBFeGNlcHRp
b246OnNfaW5mbyA9IHsgIkV4Y2VwdGlvbiIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoRXhjZXB0aW9uKSB9OworCitFeGNlcHRpb24qIEV4Y2VwdGlvbjo6Y3JlYXRlKFZN
JiB2bSwgSlNWYWx1ZSB0aHJvd25WYWx1ZSkKK3sKKyAgICBFeGNlcHRpb24qIHJlc3VsdCA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEV4Y2VwdGlvbj4odm0uaGVhcCkpIEV4Y2VwdGlvbih2
bSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgdGhyb3duVmFsdWUpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgRXhjZXB0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkK
K3sKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHN0YXRpY19jYXN0PEV4Y2VwdGlvbio+KGNl
bGwpOworICAgIGV4Y2VwdGlvbi0+fkV4Y2VwdGlvbigpOworfQorCitTdHJ1Y3R1cmUqIEV4Y2Vw
dGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEV4Y2VwdGlvbiogdGhpc09i
amVjdCA9IGpzQ2FzdDxFeGNlcHRpb24qPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Zh
bHVlKTsKK30KKworRXhjZXB0aW9uOjpFeGNlcHRpb24oVk0mIHZtKQorICAgIDogQmFzZSh2bSwg
dm0uZXhjZXB0aW9uU3RydWN0dXJlLmdldCgpKQoreworfQorCitFeGNlcHRpb246On5FeGNlcHRp
b24oKQoreworfQorCit2b2lkIEV4Y2VwdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1Zh
bHVlIHRocm93blZhbHVlKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKworICAg
IG1fdmFsdWUuc2V0KHZtLCB0aGlzLCB0aHJvd25WYWx1ZSk7CisKKyAgICBWZWN0b3I8U3RhY2tG
cmFtZT4gc3RhY2tUcmFjZTsKKyAgICB2bS5pbnRlcnByZXRlci0+Z2V0U3RhY2tUcmFjZShzdGFj
a1RyYWNlKTsKKyAgICBtX3N0YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+KHN0YWNr
VHJhY2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RXhjZXB0aW9uX2gKKyNkZWZpbmUgRXhjZXB0aW9uX2gKKworI2luY2x1ZGUgIkludGVycHJldGVy
LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgorCituYW1lc3BhY2UgSlNDIHsK
KyAgICAKK2NsYXNzIEV4Y2VwdGlvbiA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3Ry
dWN0dXJlRmxhZ3M7CisKKyAgICBzdGF0aWMgRXhjZXB0aW9uKiBjcmVhdGUoVk0mLCBKU1ZhbHVl
IHRocm93blZhbHVlKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24g
PSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IHZhbHVlT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoRXhjZXB0aW9uLCBtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgRXhjZXB0aW9uKiBj
YXN0KEpTVmFsdWUgZXhjZXB0aW9uQXNKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpz
Q2FzdDxFeGNlcHRpb24qPihleGNlcHRpb25Bc0pTVmFsdWUuYXNDZWxsKCkpOworICAgIH0KKwor
ICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CisgICAg
Y29uc3QgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+JiBzdGFjaygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhY2s7IH0KKworICAgIGJvb2wgZGlkTm90aWZ5SW5zcGVjdG9yT2ZUaHJvdygpIGNvbnN0
IHsgcmV0dXJuIG1fZGlkTm90aWZ5SW5zcGVjdG9yT2ZUaHJvdzsgfQorICAgIHZvaWQgc2V0RGlk
Tm90aWZ5SW5zcGVjdG9yT2ZUaHJvdygpIHsgbV9kaWROb3RpZnlJbnNwZWN0b3JPZlRocm93ID0g
dHJ1ZTsgfQorCisgICAgfkV4Y2VwdGlvbigpOworCitwcml2YXRlOgorICAgIEV4Y2VwdGlvbihW
TSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1ZhbHVlIHRocm93blZhbHVlKTsK
KworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZhbHVlOworICAgIFJlZkNvdW50ZWRBcnJh
eTxTdGFja0ZyYW1lPiBtX3N0YWNrOworICAgIGJvb2wgbV9kaWROb3RpZnlJbnNwZWN0b3JPZlRo
cm93IHsgZmFsc2UgfTsKKworICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEV4Y2VwdGlvbl9oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmNwcAkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJF
cnJvckhhbmRsaW5nU2NvcGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJK
U0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpTTm90QW5PYmplY3QuaCIKICNp
bmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtNTksMTcgKzYwLDExIEBAIEpTT2JqZWN0KiBjcmVh
dGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXAKICAgICByZXR1cm4gVGVybWluYXRlZEV4ZWN1dGlv
bkVycm9yOjpjcmVhdGUoKnZtKTsKIH0KIAotYm9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNl
cHRpb24oSlNPYmplY3QqIG9iamVjdCkKK2Jvb2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0
aW9uKEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewotICAgIHJldHVybiBvYmplY3QtPmluaGVyaXRz
KFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6aW5mbygpKTsKKyAgICByZXR1cm4gZXhjZXB0aW9u
LT52YWx1ZSgpLmluaGVyaXRzKFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6aW5mbygpKTsKIH0K
IAotYm9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gdmFsdWUuaW5oZXJpdHMoVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjppbmZv
KCkpOwotfQotCi0KIEpTT2JqZWN0KiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQuIikpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAkocmV2aXNpb24g
MTg1MjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogdHlw
ZWRlZiBKU09iamVjdCogKCpFcnJvckZhY3RvcnkpKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYs
IEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsKIAogSlNPYmplY3QqIGNyZWF0ZVRlcm1p
bmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oVk0qKTsKLWJvb2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9u
RXhjZXB0aW9uKEpTT2JqZWN0Kik7Ci1KU19FWFBPUlRfUFJJVkFURSBib29sIGlzVGVybWluYXRl
ZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU1ZhbHVlKTsKK0pTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNU
ZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEV4Y2VwdGlvbiopOwogSlNfRVhQT1JUX1BSSVZB
VEUgSlNPYmplY3QqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IFN0cmlu
ZyYsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsKIEpTX0VYUE9SVF9QUklWQVRFIEpT
T2JqZWN0KiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKik7CiBKU09iamVjdCog
Y3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRl
ci5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dldHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNs
dWRlICJHZXR0ZXJTZXR0ZXIuaCIKIAogI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTc1LDcgKzc2LDcgQEAgSlNWYWx1ZSBj
YWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIC8vIEZJWE1FOiBTb21lIGNhbGxl
cnMgbWF5IGludm9rZSBnZXQoKSB3aXRob3V0IGNoZWNraW5nIGZvciBhbiBleGNlcHRpb24gZmly
c3QuCiAgICAgLy8gV2Ugd29yayBhcm91bmQgdGhhdCBieSBjaGVja2luZyBoZXJlLgogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2VwdGlvbigp
OworICAgICAgICByZXR1cm4gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7CiAKICAgICBKU09i
amVjdCogZ2V0dGVyID0ganNDYXN0PEdldHRlclNldHRlcio+KGdldHRlclNldHRlciktPmdldHRl
cigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0
ZXJhdG9yT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg5LDcgKzg5LDcgQEAgSlNWYWx1ZSBpdGVyYXRvclN0ZXAoRXhlY1N0YXRlKiBleGVjLCBKUwog
CiB2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGl0ZXJhdG9yKQog
ewotICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gbnVs
bHB0cjsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAgZXhjZXB0aW9u
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CkBA
IC05OSw3ICs5OSw3IEBAIHZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHJldHVybkZ1bmN0aW9uLmlzVW5kZWZpbmVkKCkp
IHsKLSAgICAgICAgaWYgKCFleGNlcHRpb24uaXNFbXB0eSgpKQorICAgICAgICBpZiAoZXhjZXB0
aW9uKQogICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRp
b24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgaXRl
cmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICBDYWxsRGF0YSByZXR1cm5GdW5j
dGlvbkNhbGxEYXRhOwogICAgIENhbGxUeXBlIHJldHVybkZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRD
YWxsRGF0YShyZXR1cm5GdW5jdGlvbiwgcmV0dXJuRnVuY3Rpb25DYWxsRGF0YSk7CiAgICAgaWYg
KHJldHVybkZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7Ci0gICAgICAgIGlmICgh
ZXhjZXB0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAg
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CkBAIC0xMTcsNyArMTE3LDcgQEAg
dm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIHJldHVybkZ1bmN0aW9uQXJndW1lbnRzOwogICAgIEpTVmFsdWUgaW5uZXJSZXN1
bHQgPSBjYWxsKGV4ZWMsIHJldHVybkZ1bmN0aW9uLCByZXR1cm5GdW5jdGlvbkNhbGxUeXBlLCBy
ZXR1cm5GdW5jdGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgcmV0dXJuRnVuY3Rpb25Bcmd1bWVudHMp
OwogCi0gICAgaWYgKCFleGNlcHRpb24uaXNFbXB0eSgpKSB7CisgICAgaWYgKGV4Y2VwdGlvbikg
ewogICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxODUyNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJEYXRlUHJvdG90eXBl
LmgiCiAjaW5jbHVkZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5o
IgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNp
bmNsdWRlICJJbmRleGluZ0hlYWRlcklubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJM
RShQUk9NSVNFUykKIAogI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgi
CiAjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlu
bGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCkBAIC0xMzYsNyArMTM3LDcgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAgLy8gMTQuIElm
IHJlc3VsdCBpcyBhbiBhYnJ1cHQgY29tcGxldGlvbiwgY2FsbCBQcm9taXNlUmVqZWN0KHByb21p
c2UsIHJlc3VsdC5bW3ZhbHVlXV0pLgogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewot
ICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBK
U1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1ZSgpOwogICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgICAgIHByb21pc2UtPnJlamVjdCh2bSwgZXhj
ZXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURl
ZmVycmVkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb21pc2VEZWZlcnJlZC5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogI2lmIEVOQUJMRShQUk9NSVNFUykKIAogI2luY2x1ZGUgIkVycm9yLmgi
CisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIK
ICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlLmgiCkBAIC0x
NTAsNyArMTUxLDcgQEAgVGhlbmFibGVTdGF0dXMgdXBkYXRlRGVmZXJyZWRGcm9tUG90ZW50aQog
ICAgICAgICAvLyBpLiBMZXQgJ3JlamVjdFJlc3VsdCcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5n
IHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YKICAgICAgICAgLy8gICAgZGVmZXJyZWQu
W1tSZWplY3RdXSB3aXRoIHVuZGVmaW5lZCBhcyB0aGlzQXJndW1lbnQgYW5kIGEgTGlzdCBjb250
YWluaW5nCiAgICAgICAgIC8vICAgIHRoZW4uW1t2YWx1ZV1dIGFzIGFyZ3VtZW50c0xpc3QuCi0g
ICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIEpT
VmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7CiAgICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgcGVyZm9ybURlZmVycmVkUmVqZWN0KGV4
ZWMsIGRlZmVycmVkLCBleGNlcHRpb24pOwpAQCAtMTg1LDcgKzE4Niw3IEBAIFRoZW5hYmxlU3Rh
dHVzIHVwZGF0ZURlZmVycmVkRnJvbVBvdGVudGkKICAgICAgICAgLy8gaS4gTGV0ICdyZWplY3RS
ZXN1bHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0
aG9kIG9mCiAgICAgICAgIC8vICAgIGRlZmVycmVkLltbUmVqZWN0XV0gd2l0aCB1bmRlZmluZWQg
YXMgdGhpc0FyZ3VtZW50IGFuZCBhIExpc3QgY29udGFpbmluZwogICAgICAgICAvLyAgICB0aGVu
Q2FsbFJlc3VsdC5bW3ZhbHVlXV0gYXMgYXJndW1lbnRzTGlzdC4KLSAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24g
PSBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKIAogICAgICAgICBwZXJmb3JtRGVmZXJyZWRSZWplY3QoZXhlYywgZGVmZXJyZWQsIGV4
Y2VwdGlvbik7CkBAIC0yMjgsNyArMjI5LDcgQEAgdm9pZCBwZXJmb3JtRGVmZXJyZWRSZWplY3Qo
RXhlY1N0YXRlKiBleAogSlNWYWx1ZSBhYnJ1cHRSZWplY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBK
U1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQpCiB7CiAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKLSAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAg
SlNWYWx1ZSBhcmd1bWVudCA9IGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1ZSgpOwogICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAvLyBpLiBMZXQgJ3JlamVjdFJlc3VsdCcgYmUgdGhl
IHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2QKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZVJlYWN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VSZWFjdGlvbi5j
cHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvbWlzZVJlYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lm
IEVOQUJMRShQUk9NSVNFUykKIAogI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGxJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKQEAgLTg4LDcgKzg5LDcgQEAg
dm9pZCBFeGVjdXRlUHJvbWlzZVJlYWN0aW9uTWljcm90YXNrOjpydQogICAgIC8vICAgIFtbQ2Fs
bF1dIGludGVybmFsIG1ldGhvZCBvZiBkZWZlcnJlZC5bW1JlamVjdF1dIHBhc3NpbmcgdW5kZWZp
bmVkIGFzIHRoaXNBcmd1bWVudAogICAgIC8vICAgIGFuZCBhIExpc3QgY29udGFpbmluZyBoYW5k
bGVyUmVzdWx0LltbdmFsdWVdXSBhcyBhcmd1bWVudHNMaXN0LgogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlv
bigpOworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1
ZSgpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgICAgIHBlcmZvcm1E
ZWZlcnJlZFJlamVjdChleGVjLCBkZWZlcnJlZCwgZXhjZXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBA
QAogI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAj
aW5jbHVkZSAiRXJyb3JJbnN0YW5jZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKQEAgLTIzNSw2ICsyMzYsNyBAQCBWTTo6Vk0oVk1U
eXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgd2Vha01hcERhdGFTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBXZWFrTWFwRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwogICAgIGluZmVycmVkVmFsdWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFZhbHVl
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZnVuY3Rpb25SYXJl
RGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBleGNlcHRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlz
LCBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICNpZiBF
TkFCTEUoUFJPTUlTRVMpCiAgICAgcHJvbWlzZURlZmVycmVkU3RydWN0dXJlLnNldCgqdGhpcywg
SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICBwcm9taXNlUmVhY3Rpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VSZWFjdGlv
bjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpAQCAtNTQ1LDcgKzU0Nyw3
IEBAIHZvaWQgVk06OnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCkKICAgICBoZWFwLmNvbGxlY3RB
bGxHYXJiYWdlKCk7CiB9CiAKLUpTVmFsdWUgVk06OnRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBlcnJvcikKK3ZvaWQgVk06OnRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAgICAgaWYgKE9wdGlvbnM6OmJyZWFrT25U
aHJvdygpKSB7CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcihl
eGVjKSwgIiBmb3IgY29kZSBibG9jayAiLCAqZXhlYy0+Y29kZUJsb2NrKCksICJcbiIpOwpAQCAt
NTUzLDM3ICs1NTUsMjIgQEAgSlNWYWx1ZSBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eAogICAgIH0KICAgICAKICAgICBBU1NFUlQoZXhlYyA9PSB0b3BDYWxsRnJhbWUgfHwgZXhlYyA9
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSB8fCBleGVjID09IGV4
ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKLSAgICAKLSAgICBWZWN0
b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICBpbnRlcnByZXRlci0+Z2V0U3RhY2tUcmFj
ZShzdGFja1RyYWNlKTsKLSAgICBtX2V4Y2VwdGlvblN0YWNrID0gUmVmQ291bnRlZEFycmF5PFN0
YWNrRnJhbWU+KHN0YWNrVHJhY2UpOwotICAgIG1fZXhjZXB0aW9uID0gZXJyb3I7Ci0KLSAgICBy
ZXR1cm4gZXJyb3I7Ci19Ci0gICAgCi1KU09iamVjdCogVk06OnRocm93RXhjZXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIGVycm9yKQotewotICAgIHJldHVybiBhc09iamVjdCh0aHJv
d0V4Y2VwdGlvbihleGVjLCBKU1ZhbHVlKGVycm9yKSkpOwotfQotdm9pZCBWTTo6Z2V0RXhjZXB0
aW9uSW5mbyhKU1ZhbHVlJiBleGNlcHRpb24sIFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPiYg
ZXhjZXB0aW9uU3RhY2spCi17Ci0gICAgZXhjZXB0aW9uID0gbV9leGNlcHRpb247Ci0gICAgZXhj
ZXB0aW9uU3RhY2sgPSBtX2V4Y2VwdGlvblN0YWNrOwotfQotdm9pZCBWTTo6c2V0RXhjZXB0aW9u
SW5mbyhKU1ZhbHVlJiBleGNlcHRpb24sIFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPiYgZXhj
ZXB0aW9uU3RhY2spCi17Ci0gICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247Ci0gICAgbV9leGNl
cHRpb25TdGFjayA9IGV4Y2VwdGlvblN0YWNrOworICAgIHNldEV4Y2VwdGlvbihleGNlcHRpb24p
OwogfQogCi12b2lkIFZNOjpjbGVhckV4Y2VwdGlvbigpCitKU1ZhbHVlIFZNOjp0aHJvd0V4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhyb3duVmFsdWUpCiB7Ci0gICAgbV9leGNl
cHRpb24gPSBKU1ZhbHVlKCk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBqc0R5bmFtaWND
YXN0PEV4Y2VwdGlvbio+KHRocm93blZhbHVlKTsKKyAgICBpZiAoIWV4Y2VwdGlvbikKKyAgICAg
ICAgZXhjZXB0aW9uID0gRXhjZXB0aW9uOjpjcmVhdGUoKnRoaXMsIHRocm93blZhbHVlKTsKKwor
ICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIEpTVmFsdWUo
ZXhjZXB0aW9uKTsKIH0KLXZvaWQgVk06OiBjbGVhckV4Y2VwdGlvblN0YWNrKCkKKworSlNPYmpl
Y3QqIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBlcnJvcikK
IHsKLSAgICBtX2V4Y2VwdGlvblN0YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+KCk7
CisgICAgcmV0dXJuIGFzT2JqZWN0KHRocm93RXhjZXB0aW9uKGV4ZWMsIEpTVmFsdWUoZXJyb3Ip
KSk7CiB9CiAKIHZvaWQgVk06OnNldFN0YWNrUG9pbnRlckF0Vk1FbnRyeSh2b2lkKiBzcCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTg1MjQ2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyAr
NTgsNiBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJy
YXkuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KICNpbmNsdWRlIDx3dGYvU3RhY2tC
b3VuZHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KQEAgLTc4LDYg
Kzc3LDcgQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29kZUNhY2hlOwogY2xhc3MgQ29tbW9u
SWRlbnRpZmllcnM7CiBjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBI
YW5kbGVTdGFjazsKIGNsYXNzIFR5cGVQcm9maWxlcjsKIGNsYXNzIFR5cGVQcm9maWxlckxvZzsK
QEAgLTI3NCw2ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2Vha01h
cERhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRWYWx1ZVN0cnVj
dHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlOwor
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV4Y2VwdGlvblN0cnVjdHVyZTsKICNpZiBFTkFCTEUoUFJP
TUlTRVMpCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZURlZmVycmVkU3RydWN0dXJlOwog
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VSZWFjdGlvblN0cnVjdHVyZTsKQEAgLTM3Miwx
NCArMzczLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWTSwg
dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgY2xlYXJFeGNlcHRpb24oKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFy
RXhjZXB0aW9uU3RhY2soKTsKLSAgICB2b2lkIGdldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhj
ZXB0aW9uLCBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKTsKLSAg
ICB2b2lkIHNldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJy
YXk8U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKTsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9Ci0gICAgSlNWYWx1ZSogYWRkcmVzc09mRXhj
ZXB0aW9uKCkgeyByZXR1cm4gJm1fZXhjZXB0aW9uOyB9Ci0gICAgY29uc3QgUmVmQ291bnRlZEFy
cmF5PFN0YWNrRnJhbWU+JiBleGNlcHRpb25TdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0
aW9uU3RhY2s7IH0KKyAgICB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyBtX2V4Y2VwdGlvbiA9IG51
bGxwdHI7IH0KKyAgICB2b2lkIHNldEV4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2VwdGlvbikgeyBt
X2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsgfQogCisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKSBj
b25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbjsgfQorICAgIEpTQ2VsbCoqIGFkZHJlc3NPZkV4Y2Vw
dGlvbigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKio+KCZtX2V4Y2VwdGlvbik7
IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRl
KiwgRXhjZXB0aW9uKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0aHJvd0V4Y2Vw
dGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVj
dCogdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIApAQCAtNTY5LDEyICs1
NjksMTEgQEAgcHJpdmF0ZToKICNlbmRpZgogI2VuZGlmCiAgICAgdm9pZCogbV9sYXN0U3RhY2tU
b3A7Ci0gICAgSlNWYWx1ZSBtX2V4Y2VwdGlvbjsKKyAgICBFeGNlcHRpb24qIG1fZXhjZXB0aW9u
IHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9pbkRlZmluZU93blByb3BlcnR5OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxDb2RlQ2FjaGU+IG1fY29kZUNhY2hlOwogICAgIExlZ2FjeVByb2ZpbGVyKiBt
X2VuYWJsZWRQcm9maWxlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbHRpbkV4ZWN1dGFibGVz
PiBtX2J1aWx0aW5FeGVjdXRhYmxlczsKLSAgICBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4g
bV9leGNlcHRpb25TdGFjazsKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFdhdGNocG9pbnRT
ZXQ+PiBtX2ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludFNldHM7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFR5cGVQcm9maWxlcj4gbV90eXBlUHJvZmlsZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVQ
cm9maWxlckxvZz4gbV90eXBlUHJvZmlsZXJMb2c7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDkgKzQ5LDYgQEAgVk1FbnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUoVk0mIHZtLCBK
U0dsbwogICAgICAgICAvLyBvYnNlcnZlIHRpbWUgeG9uZSBjaGFuZ2VzLgogICAgICAgICB2bS5y
ZXNldERhdGVDYWNoZSgpOwogICAgIH0KLQotICAgIC8vIENsZWFyIHRoZSBjYXB0dXJlZCBleGNl
cHRpb24gc3RhY2sgYmV0d2VlbiBlbnRyaWVzCi0gICAgdm0uY2xlYXJFeGNlcHRpb25TdGFjaygp
OwogfQogCiB2b2lkIFZNRW50cnlTY29wZTo6c2V0RW50cnlTY29wZURpZFBvcExpc3RlbmVyKHZv
aWQqIGtleSwgRW50cnlTY29wZURpZFBvcExpc3RlbmVyIGxpc3RlbmVyKQpJbmRleDogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsODEgQEAKKzIwMTUtMDYtMDUgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgorCisgICAgICAgIGZpbmFsbHkgYmxvY2tzIHNob3VsZCBub3Qgc2V0IHRoZSBl
eGNlcHRpb24gc3RhY2sgdHJhY2Ugd2hlbiByZS10aHJvd2luZyB0aGUgZXhjZXB0aW9uLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1NTI1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisKKyAgICAgICAgVXBkYXRlIHRvIHVz
ZSB0aGUgbmV3IEpTQzo6RXhjZXB0aW9uIG9iamVjdC4KKworICAgICAgICBUZXN0OiBpbnNwZWN0
b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9ucy5odG1sCisKKyAgICAgICAgKiBGb3J3YXJk
aW5nSGVhZGVycy9ydW50aW1lL0V4Y2VwdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0NhbGxiYWNrRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbGxiYWNrRGF0
YTo6aW52b2tlQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhO
U1Jlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
Ojpsb29rdXBOYW1lc3BhY2VVUkkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc0FycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnJl
cG9ydEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRDdXJyZW50RXhjZXB0aW9u
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Vycm9ySGFu
ZGxlcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5l
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNNYWluVGhyZWFkRXhlY1N0YXRlOjpkaWRMZWF2ZVNjcmlwdENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6ZnVuY3Rpb25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6ZXZhbHVhdGVIYW5kbGVyRnJvbUFueVRocmVhZCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpKU01haW5UaHJlYWRFeGVjU3RhdGU6OmN1cnJlbnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU01haW5UaHJl
YWRFeGVjU3RhdGU6OnJ1blRhc2spOgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNNZWRpYURl
dmljZXNDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNZWRpYURldmljZXM6OmdldFVz
ZXJNZWRpYSk6CisgICAgICAgIC0gRml4ZWQgYSBidWcgd2hlcmUgdGhlIGV4Y2VwdGlvbiB3YXMg
bm90IGNsZWFyZWQgYmVmb3JlIGVudGVyaW5nIHRoZSBWTSB0bworICAgICAgICAgIGNhbGwgSlMg
Y29kZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFjay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU011dGF0aW9uQ2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1JlYWRhYmxlSlNTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UHJv
cGVydHlGcm9tT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxGdW5jdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFkYWJsZUpTU3RyZWFtOjpTb3VyY2U6OnN0YXJ0KToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2No
ZWR1bGVkQWN0aW9uOjpleGVjdXRlRnVuY3Rpb25JbkNvbnRleHQpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpk
ZXNlcmlhbGl6ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzZXRFeGNlcHRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6c2NoZWR1bGVF
eGVjdXRpb25UZXJtaW5hdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0
Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
d29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJT
Y3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHREZWJ1
Z1NlcnZlcjo6cnVuRXZlbnRMb29wV2hpbGVQYXVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyU2NyaXB0RGVidWdTZXJ2ZXI6OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpj
L1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUpTV3JhcHBlcik6
CisgICAgICAgIChXZWJDb3JlOjphZGRFeGNlcHRpb25Ub0NvbnNvbGUpOgorICAgICAgICAoLVtX
ZWJTY3JpcHRPYmplY3QgY2FsbFdlYlNjcmlwdE1ldGhvZDp3aXRoQXJndW1lbnRzOl0pOgorICAg
ICAgICAoLVtXZWJTY3JpcHRPYmplY3QgZXZhbHVhdGVXZWJTY3JpcHQ6XSk6CisgICAgICAgIC0g
Q2hhbmdlZCB0byBjYWxsIGEgdmVyc2lvbiBvZiBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1
YXRlKCkgdGhhdCBwcm92aWRlcworICAgICAgICAgIGEgc3R1YiByZXR1cm5lZEV4Y2VwdGlvbiBi
ZWNhdXNlIGV2YWx1YXRlV2ViU2NyaXB0OiBkb2Vzbid0IG5lZWQgdGhlIGV4Y2VwdGlvbi4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVyOjppc0NvbnRlbnRTY3JpcHQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZXBvcnRFeGNlcHRpb24pOgorICAg
ICAgICAqIGluc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiB3b3Jr
ZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckdsb2Jh
bFNjb3BlOjppbXBvcnRTY3JpcHRzKToKKwogMjAxNS0wNi0wNSAgTWFudWVsIFJlZ28gQ2FzYXNu
b3ZhcyAgPHJlZ29AaWdhbGlhLmNvbT4KIAogICAgICAgICBbQ1NTIEdyaWQgTGF5b3V0XSBTdXBw
b3J0IGRvdHMgc2VxdWVuY2VzIGluIGdyaWQtdGVtcGxhdGUtYXJlYXMKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvRXhjZXB0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9FeGNlcHRpb24uaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUv
RXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNv
cmVfRldEX0V4Y2VwdGlvbl9oCisjZGVmaW5lIFdlYkNvcmVfRldEX0V4Y2VwdGlvbl9oCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvRXhjZXB0aW9uLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJKHJldmlzaW9uIDE4NTI0
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDEwIEBAIEpTVmFsdWUgSlNDYWxsYmFja0RhdGE6Omlu
dm9rZUNhbGxiYWNrKEoKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29r
aWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6Omluc3RydW1lbnRGdW5jdGlvbkNhbGwoY29udGV4
dCwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKIAotICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIEV4
Y2VwdGlvbiogZXhjZXB0aW9uOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gY29udGV4dC0+aXNEb2N1
bWVudCgpCi0gICAgICAgID8gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0
aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgJmV4Y2VwdGlvbikKLSAg
ICAgICAgOiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhp
c1ZhbHVlLCBhcmdzLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgPyBKU01haW5UaHJlYWRFeGVjU3Rh
dGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBh
cmdzLCBleGNlcHRpb24pCisgICAgICAgIDogSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxs
VHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgZXhjZXB0aW9uKTsKIAogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FsbEZ1bmN0aW9uKGNvb2tpZSwgY29udGV4dCk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQ
YXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTMsOCArOTMsOCBAQCBTdHJpbmcgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hCiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZChqc1N0cmluZ1dp
dGhDYWNoZShleGVjLCBwcmVmaXgpKTsKIAotICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgIEpT
VmFsdWUgcmV0dmFsID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIG1fY3VzdG9tUmVzb2x2ZXIuZ2V0KCksIGFyZ3MsICZleGNl
cHRpb24pOworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmV0dmFsID0g
SlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIG1fY3VzdG9tUmVzb2x2ZXIuZ2V0KCksIGFyZ3MsIGV4Y2VwdGlvbik7CiAKICAgICBT
dHJpbmcgcmVzdWx0OwogICAgIGlmIChleGNlcHRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9ySGFuZGxpbmdTY29w
ZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9F
eGNlcHRpb25IZWxwZXJzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CiAjaW5j
bHVkZSA8c3RkYXJnLmg+CkBAIC0xMzgsNyArMTM5LDcgQEAgSlNDOjpKU1ZhbHVlIGpzQXJyYXko
SlNDOjpFeGVjU3RhdGUqIGV4ZQogICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMs
IDAsIGdsb2JhbE9iamVjdCwgbGlzdCk7CiB9CiAKLXZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0
KQordm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIGV4Y2Vw
dGlvbiwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
ZXhlYy0+dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBpZiAoaXNU
ZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbikpCkBAIC0xNDgsNyArMTQ5LDYg
QEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgUmVmUHRy
PFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNl
cHRpb24oZXhlYywgZXhjZXB0aW9uLCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVU
b0NhcHR1cmUpKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgIGV4ZWMtPmNsZWFy
U3VwcGxlbWVudGFyeUV4Y2VwdGlvbkluZm8oKTsKIAogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpOwogICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0ganNEeW5hbWljQ2Fz
dDxKU0RPTVdpbmRvdyo+KGdsb2JhbE9iamVjdCkpIHsKQEAgLTE2NiwxNCArMTY2LDEzIEBAIHZv
aWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICB9CiAKICAgICBTdHJp
bmcgZXJyb3JNZXNzYWdlOwotICAgIGlmIChFeGNlcHRpb25CYXNlKiBleGNlcHRpb25CYXNlID0g
dG9FeGNlcHRpb25CYXNlKGV4Y2VwdGlvbikpCisgICAgaWYgKEV4Y2VwdGlvbkJhc2UqIGV4Y2Vw
dGlvbkJhc2UgPSB0b0V4Y2VwdGlvbkJhc2UoZXhjZXB0aW9uLT52YWx1ZSgpKSkKICAgICAgICAg
ZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uQmFzZS0+bWVzc2FnZSgpICsgIjogIiAgKyBleGNlcHRp
b25CYXNlLT5kZXNjcmlwdGlvbigpOwogICAgIGVsc2UgewogICAgICAgICAvLyBGSVhNRTogPGh0
dHA6Ly93ZWJraXQub3JnL2IvMTE1MDg3PiBXZWIgSW5zcGVjdG9yOiBXZWJDb3JlOjpyZXBvcnRF
eGNlcHRpb24gc2hvdWxkIG5vdCBldmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlv
bnMKICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGN1c3RvbiBleGNlcHRpb24gb2JqZWN0LCBjYWxs
IHRvU3RyaW5nIG9uIGl0IHRvIHRyeSBhbmQgZ2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRp
b24gZm9yIHRoZSBleGNlcHRpb24uCi0gICAgICAgIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IGV4Y2Vw
dGlvbi0+dmFsdWUoKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyU3VwcGxlbWVudGFyeUV4Y2Vw
dGlvbkluZm8oKTsKICAgICB9CiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CkBAIC0xODIsNyArMTgxLDcgQEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVj
LCBKUwogCiB2b2lkIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgRXhjZXB0aW9u
KiBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOwogICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDE4NTI0NikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9t
aWNTdHJpbgogCiBjb25zdCBKU0M6Okhhc2hUYWJsZSYgZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0
YShKU0M6OlZNJiwgY29uc3QgSlNDOjpIYXNoVGFibGUmIHN0YXRpY1RhYmxlKTsKIAotV0VCQ09S
RV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUgZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7CitXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKiwgQ2Fj
aGVkU2NyaXB0KiA9IG51bGxwdHIpOwogdm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKik7CiAKIEpTQzo6SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGVj
U3RhdGUqLCBFeGNlcHRpb25Db2RlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXJyb3JIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0Vycm9ySGFuZGxlci5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgs
MTAgKzk4LDEwIEBAIHZvaWQgSlNFcnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEUKICAg
ICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAgICBWTUVudHJ5U2NvcGUg
ZW50cnlTY29wZSh2bSwgdm0uZW50cnlTY29wZSA/IHZtLmVudHJ5U2NvcGUtPmdsb2JhbE9iamVj
dCgpIDogZ2xvYmFsT2JqZWN0KTsKIAotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICAg
ICAgRXhjZXB0aW9uKiBleGNlcHRpb247CiAgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkKLSAgICAgICAgICAgID8gSlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgZ2xvYmFsT2JqZWN0LCBhcmdzLCAmZXhjZXB0aW9uKQotICAgICAgICAgICAgOiBKU0M6OmNh
bGwoZXhlYywganNGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFy
Z3MsICZleGNlcHRpb24pOworICAgICAgICAgICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNh
bGwoZXhlYywganNGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFy
Z3MsIGV4Y2VwdGlvbikKKyAgICAgICAgICAgIDogSlNDOjpjYWxsKGV4ZWMsIGpzRnVuY3Rpb24s
IGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdzLCBleGNlcHRpb24pOwogCiAg
ICAgICAgIGdsb2JhbE9iamVjdC0+c2V0Q3VycmVudEV2ZW50KHNhdmVkRXZlbnQpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJl
dmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0
ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCwxMCArMTI0LDEwIEBAIHZvaWQgSlNFdmVu
dExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1
bmN0aW9uQ2FsbChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEpOwog
CiAgICAgICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gaGFuZGxlRXZlbnRGdW5jdGlvbiA9PSBqc0Z1
bmN0aW9uID8gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGV2ZW50LT5jdXJyZW50VGFyZ2V0KCkp
IDoganNGdW5jdGlvbjsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgICAgIEV4Y2Vw
dGlvbiogZXhjZXB0aW9uOwogICAgICAgICBKU1ZhbHVlIHJldHZhbCA9IHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmlzRG9jdW1lbnQoKQotICAgICAgICAgICAgPyBKU01haW5UaHJlYWRFeGVjU3Rh
dGU6OmNhbGwoZXhlYywgaGFuZGxlRXZlbnRGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0
aGlzVmFsdWUsIGFyZ3MsICZleGNlcHRpb24pCi0gICAgICAgICAgICA6IEpTQzo6Y2FsbChleGVj
LCBoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJn
cywgJmV4Y2VwdGlvbik7CisgICAgICAgICAgICA/IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2Fs
bChleGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1
ZSwgYXJncywgZXhjZXB0aW9uKQorICAgICAgICAgICAgOiBKU0M6OmNhbGwoZXhlYywgaGFuZGxl
RXZlbnRGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIGV4Y2Vw
dGlvbik7CiAKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rp
b24oY29va2llLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwCShyZXZp
c2lvbiAxODUyNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRF
eGVjU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxOCArNDYsMTggQEAgdm9pZCBKU01h
aW5UaHJlYWRFeGVjU3RhdGU6OmRpZExlYXZlU2NyaQogICAgIE11dGF0aW9uT2JzZXJ2ZXI6OmRl
bGl2ZXJBbGxNdXRhdGlvbnMoKTsKIH0KIAotSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uQ2FsbEhhbmRs
ZXJGcm9tQW55VGhyZWFkKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZnVuY3Rp
b25PYmplY3QsIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEmIGNh
bGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3Ms
IEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKQorSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uQ2FsbEhhbmRs
ZXJGcm9tQW55VGhyZWFkKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZnVuY3Rp
b25PYmplY3QsIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEmIGNh
bGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3Ms
IEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24pCiB7CiAgICAgaWYgKGlzTWFpblRo
cmVhZCgpKQotICAgICAgICByZXR1cm4gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMs
IGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgZXhj
ZXB0aW9uKTsKLSAgICByZXR1cm4gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxs
VHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0
dXJuIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAg
ICByZXR1cm4gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERh
dGEsIHRoaXNWYWx1ZSwgYXJncywgcmV0dXJuZWRFeGNlcHRpb24pOwogfQogCi1KU0M6OkpTVmFs
dWUgZXZhbHVhdGVIYW5kbGVyRnJvbUFueVRocmVhZChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6
SlNWYWx1ZSogZXhjZXB0aW9uKQorSlNDOjpKU1ZhbHVlIGV2YWx1YXRlSGFuZGxlckZyb21BbnlU
aHJlYWQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNl
LCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0
aW9uKQogewogICAgIGlmIChpc01haW5UaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIGV4Y2VwdGlv
bik7Ci0gICAgcmV0dXJuIEpTQzo6ZXZhbHVhdGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIGV4
Y2VwdGlvbik7CisgICAgICAgIHJldHVybiBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRl
KGV4ZWMsIHNvdXJjZSwgdGhpc1ZhbHVlLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgcmV0dXJu
IEpTQzo6ZXZhbHVhdGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIHJldHVybmVkRXhjZXB0aW9u
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgJKHJldmlzaW9uIDE4NTI0
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNiArNTAsMjIgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gc19tYWluVGhyZWFkU3RhdGU7CiAgICAgfTsKICAgICAKLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNhbGwoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEs
IEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpK
U1ZhbHVlKiBleGNlcHRpb24pCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjYWxsKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUg
Y2FsbFR5cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJu
ZWRFeGNlcHRpb24pCiAgICAgewogICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGUgY3VycmVu
dFN0YXRlKGV4ZWMpOwotICAgICAgICByZXR1cm4gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uT2Jq
ZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgZXhjZXB0aW9uKTsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNh
bGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICB9OwogCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6
SlNWYWx1ZSogZXhjZXB0aW9uKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZXZhbHVhdGUoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBKU0M6OkpT
VmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKQogICAg
IHsKICAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShleGVjKTsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6ZXZhbHVhdGUoZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIGV4Y2Vw
dGlvbik7CisgICAgICAgIHJldHVybiBKU0M6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZSwgdGhpc1Zh
bHVlLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgfTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgZXZhbHVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYg
c291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlID0gSlNDOjpKU1ZhbHVlKCkpCisgICAgewor
ICAgICAgICBKU0M6OkV4Y2VwdGlvbiogdW51c2VkOworICAgICAgICByZXR1cm4gZXZhbHVhdGUo
ZXhlYywgc291cmNlLCB0aGlzVmFsdWUsIHVudXNlZCk7CiAgICAgfTsKIAogICAgIHN0YXRpYyB2
b2lkIHJ1blRhc2soSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6TWljcm90YXNrJiB0YXNrKQpA
QCAtMTIxLDggKzEyNyw4IEBAIHByaXZhdGU6CiAgICAgSlNDOjpFeGVjU3RhdGUqIG1fcHJldmlv
dXNTdGF0ZTsKIH07CiAKLUpTQzo6SlNWYWx1ZSBmdW5jdGlvbkNhbGxIYW5kbGVyRnJvbUFueVRo
cmVhZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpD
YWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIGNv
bnN0IEpTQzo6QXJnTGlzdCYgYXJncywgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pOwotSlNDOjpK
U1ZhbHVlIGV2YWx1YXRlSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OlNvdXJjZUNvZGUmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkpTVmFsdWUq
IGV4Y2VwdGlvbik7CitKU0M6OkpTVmFsdWUgZnVuY3Rpb25DYWxsSGFuZGxlckZyb21BbnlUaHJl
YWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2Fs
bFR5cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIEpTQzo6RXhjZXB0aW9uKiYgcmV0dXJuZWRFeGNlcHRpb24p
OworSlNDOjpKU1ZhbHVlIGV2YWx1YXRlSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6
OkV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhRGV2aWNlc0N1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYURl
dmljZXNDdXN0b20uY3BwCShyZXZpc2lvbiAxODUyNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01lZGlhRGV2aWNlc0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYg
KzM5LDcgQEAKICNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKICNpbmNsdWRlICJKU01lZGlhU3Ry
ZWFtLmgiCiAjaW5jbHVkZSAiSlNOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvci5oIgorI2luY2x1ZGUg
PHJ1bnRpbWUvRXhjZXB0aW9uLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTUwLDcg
KzUxLDkgQEAgSlNWYWx1ZSBKU01lZGlhRGV2aWNlczo6Z2V0VXNlck1lZGlhKEV4ZQogCiAgICAg
RGljdGlvbmFyeSBvcHRpb25zKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgd3JhcHBlci5yZWplY3QoZXhlYy0+ZXhjZXB0
aW9uKCkpOworICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigp
OworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICB3cmFwcGVyLnJlamVj
dChleGNlcHRpb24tPnZhbHVlKCkpOwogICAgICAgICByZXR1cm4gd3JhcHBlci5wcm9taXNlKCk7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uQ2Fs
bGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0
YXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDgg
Kzg3LDggQEAgdm9pZCBKU011dGF0aW9uQ2FsbGJhY2s6OmNhbGwoY29uc3QgVmVjdAogCiAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4ZWNT
dGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9uQ2FsbChjb250ZXh0LCBjYWxsVHlwZSwgY2FsbERhdGEp
OwogCi0gICAgSlNWYWx1ZSBleGNlcHRpb247Ci0gICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpj
YWxsKGV4ZWMsIGNhbGxiYWNrLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzT2JzZXJ2ZXIsIGFyZ3Ms
ICZleGNlcHRpb24pOworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uOworICAgIEpTTWFpblRocmVh
ZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBjYWxsYmFjaywgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc09i
c2VydmVyLCBhcmdzLCBleGNlcHRpb24pOwogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCBjb250ZXh0KTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvUmVhZGFibGVKU1N0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVKU1N0cmVhbS5jcHAJKHJldmlzaW9uIDE4NTI0
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlSlNTdHJlYW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBnZXRQ
cm9wZXJ0eUZyb21PYmoKICAgICByZXR1cm4gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCBpZGVudGlmaWVyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBjYWxsRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGpzRnVuY3Rpb24sIEpTVmFs
dWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMsIEpTVmFsdWUqIGV4Y2VwdGlv
bikKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBjYWxsRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGpzRnVuY3Rpb24sIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmd1
bWVudHMsIEV4Y2VwdGlvbiomIGV4Y2VwdGlvbikKIHsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
ICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGpzRnVuY3Rpb24sIGNhbGxEYXRh
KTsKQEAgLTg4LDggKzg4LDggQEAgdm9pZCBSZWFkYWJsZUpTU3RyZWFtOjpkb1N0YXJ0KEV4ZWNT
dGF0ZQogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMu
YXBwZW5kKGpzQ29udHJvbGxlcihleGVjLCBnbG9iYWxPYmplY3QoKSkpOwogCi0gICAgSlNWYWx1
ZSBleGNlcHRpb247Ci0gICAgY2FsbEZ1bmN0aW9uKCZleGVjLCBzdGFydEZ1bmN0aW9uLCBtX3Nv
dXJjZS5nZXQoKSwgYXJndW1lbnRzLCAmZXhjZXB0aW9uKTsKKyAgICBFeGNlcHRpb24qIGV4Y2Vw
dGlvbjsKKyAgICBjYWxsRnVuY3Rpb24oJmV4ZWMsIHN0YXJ0RnVuY3Rpb24sIG1fc291cmNlLmdl
dCgpLCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7CiAKICAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAg
ICAgIHRocm93Vk1FcnJvcigmZXhlYywgZXhjZXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNpb24gMTg1MjQ2KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTksMTEgKzk5LDExIEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRl
RnVuY3Rpb25JbkMKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUg
PSBKU01haW5UaHJlYWRFeGVjU3RhdGU6Omluc3RydW1lbnRGdW5jdGlvbkNhbGwoJmNvbnRleHQs
IGNhbGxUeXBlLCBjYWxsRGF0YSk7CiAKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBFeGNl
cHRpb24qIGV4Y2VwdGlvbjsKICAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKQotICAgICAg
ICBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgbV9mdW5jdGlvbi5nZXQoKSwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsICZleGNlcHRpb24pOworICAgICAgICBK
U01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgbV9mdW5jdGlvbi5nZXQoKSwgY2FsbFR5
cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIGV4Y2VwdGlvbik7CiAgICAgZWxzZQotICAg
ICAgICBKU0M6OmNhbGwoZXhlYywgbV9mdW5jdGlvbi5nZXQoKSwgY2FsbFR5cGUsIGNhbGxEYXRh
LCB0aGlzVmFsdWUsIGFyZ3MsICZleGNlcHRpb24pOworICAgICAgICBKU0M6OmNhbGwoZXhlYywg
bV9mdW5jdGlvbi5nZXQoKSwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIGV4
Y2VwdGlvbik7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlv
bihjb29raWUsICZjb250ZXh0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjAsOSArMTYwLDggQEAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxl
cgogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbEV2YWx1YXRlU2NyaXB0KG1fZnJhbWUsIHNvdXJjZVVSTCwg
c291cmNlQ29kZS5zdGFydExpbmUoKSk7CiAKLSAgICBKU1ZhbHVlIGV2YWx1YXRpb25FeGNlcHRp
b247Ci0KLSAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpl
dmFsdWF0ZShleGVjLCBqc1NvdXJjZUNvZGUsIHNoZWxsLCAmZXZhbHVhdGlvbkV4Y2VwdGlvbik7
CisgICAgRXhjZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmV0dXJu
VmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRlKGV4ZWMsIGpzU291cmNlQ29k
ZSwgc2hlbGwsIGV2YWx1YXRpb25FeGNlcHRpb24pOwogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRFdmFsdWF0ZVNjcmlwdChjb29raWUsIG1fZnJhbWUpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAJKHJldmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcgQEAKICNp
bmNsdWRlIDxydW50aW1lL0Jvb2xlYW5PYmplY3QuaD4KICNpbmNsdWRlIDxydW50aW1lL0RhdGVJ
bnN0YW5jZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1l
L0V4Y2VwdGlvbi5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXcuaD4KQEAgLTI3MDIsNyArMjcwMyw3IEBAIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBTZXJpYWwKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBz
ZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCB2YWx1
ZSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAg
ICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhl
YywgZXhlYy0+ZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4
ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1ZSgpKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMjczMiw3ICsyNzMzLDcgQEAg
SlNWYWx1ZVJlZiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaQogICAgIEpTVmFsdWUgdmFs
dWUgPSBkZXNlcmlhbGl6ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG51bGxw
dHIpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBpZiAoZXhjZXB0
aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlv
bigpKTsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGVjLT5leGNlcHRp
b24oKS0+dmFsdWUoKSk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxODUyNDYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGhlYXAvU3Ryb25n
SW5saW5lcy5oPgogI2luY2x1ZGUgPGludGVycHJldGVyL0ludGVycHJldGVyLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9Db21wbGV0aW9uLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4K
ICNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRlIDxydW50aW1l
L0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KQEAgLTk4LDE1ICs5OSwxNSBA
QCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvCiAgICAgaWYgKGlzRXhl
Y3V0aW9uRm9yYmlkZGVuKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlIGV4Y2VwdGlvbjsKLSAgICBldmFsdWF0ZShzb3VyY2VDb2RlLCAmZXhjZXB0aW9u
KTsKLSAgICBpZiAoZXhjZXB0aW9uLmpzVmFsdWUoKSkgeworICAgIEV4Y2VwdGlvbiogZXhjZXB0
aW9uOworICAgIGV2YWx1YXRlKHNvdXJjZUNvZGUsIGV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2Vw
dGlvbikgewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSgpKTsKLSAgICAgICAgcmVwb3J0
RXhjZXB0aW9uKG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCksIGV4Y2Vw
dGlvbi5qc1ZhbHVlKCkpOworICAgICAgICByZXBvcnRFeGNlcHRpb24obV93b3JrZXJHbG9iYWxT
Y29wZVdyYXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhjZXB0aW9uKTsKICAgICB9CiB9CiAKLXZvaWQg
V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYg
c291cmNlQ29kZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUqIGV4Y2VwdGlvbikKK3ZvaWQgV29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291
cmNlQ29kZSwgSlNDOjpFeGNlcHRpb24qJiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBpZiAo
aXNFeGVjdXRpb25Gb3JiaWRkZW4oKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE2LDggKzExNyw4
IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBtX3dvcmtlckdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsRXhlYygpOwogICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCi0gICAgSlNWYWx1ZSBldmFsdWF0aW9uRXhjZXB0
aW9uOwotICAgIEpTQzo6ZXZhbHVhdGUoZXhlYywgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwg
bV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbFRoaXMoKSwgJmV2YWx1YXRpb25FeGNl
cHRpb24pOworICAgIEpTQzo6RXhjZXB0aW9uKiBldmFsdWF0aW9uRXhjZXB0aW9uOworICAgIEpT
Qzo6ZXZhbHVhdGUoZXhlYywgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV93b3JrZXJHbG9i
YWxTY29wZVdyYXBwZXItPmdsb2JhbFRoaXMoKSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGlmICgoZXZhbHVhdGlvbkV4Y2VwdGlvbiAmJiBp
c1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXZhbHVhdGlvbkV4Y2VwdGlvbikpIApAQCAt
MTMxLDE2ICsxMzIsMTkgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShj
bwogICAgICAgICBpbnQgbGluZU51bWJlciA9IDA7CiAgICAgICAgIGludCBjb2x1bW5OdW1iZXIg
PSAwOwogICAgICAgICBTdHJpbmcgc291cmNlVVJMID0gc291cmNlQ29kZS51cmwoKS5zdHJpbmco
KTsKLSAgICAgICAgaWYgKG1fd29ya2VyR2xvYmFsU2NvcGUtPnNhbml0aXplU2NyaXB0RXJyb3Io
ZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHNvdXJjZVVSTCwgc291cmNl
Q29kZS5jYWNoZWRTY3JpcHQoKSkpCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUoKm1fdm0sIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlLmltcGwoKSkpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgKmV4Y2VwdGlvbiA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCptX3ZtLCBldmFs
dWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKG1fd29ya2VyR2xvYmFsU2NvcGUtPnNhbml0
aXplU2NyaXB0RXJyb3IoZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHNv
dXJjZVVSTCwgc291cmNlQ29kZS5jYWNoZWRTY3JpcHQoKSkpIHsKKyAgICAgICAgICAgIHZtLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZS5pbXBsKCkp
KTsKKyAgICAgICAgICAgIGV2YWx1YXRpb25FeGNlcHRpb24gPSB2bS5leGNlcHRpb24oKTsKKyAg
ICAgICAgICAgIHZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIH0KICAgICB9CisgICAgcmV0
dXJuZWRFeGNlcHRpb24gPSBldmFsdWF0aW9uRXhjZXB0aW9uOwogfQogCi12b2lkIFdvcmtlclNj
cmlwdENvbnRyb2xsZXI6OnNldEV4Y2VwdGlvbihjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgZXhjZXB0aW9uKQordm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzZXRFeGNlcHRpb24o
SlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbikKIHsKLSAgICBtX3dvcmtlckdsb2JhbFNjb3BlV3Jh
cHBlci0+Z2xvYmFsRXhlYygpLT52bSgpLnRocm93RXhjZXB0aW9uKG1fd29ya2VyR2xvYmFsU2Nv
cGVXcmFwcGVyLT5nbG9iYWxFeGVjKCksIGV4Y2VwdGlvbi5qc1ZhbHVlKCkpOworICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjID0gbV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbEV4ZWMo
KTsKKyAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CiAK
IHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6c2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlv
bigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9s
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2Ny
aXB0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxODUyNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDkg
KzYwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBl
dmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7Ci0gICAgICAgIHZvaWQgZXZhbHVhdGUo
Y29uc3QgU2NyaXB0U291cmNlQ29kZSYsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKiBleGNlcHRp
b24pOworICAgICAgICB2b2lkIGV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmLCBKU0M6
OkV4Y2VwdGlvbiomIHJldHVybmVkRXhjZXB0aW9uKTsKIAotICAgICAgICB2b2lkIHNldEV4Y2Vw
dGlvbihjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOworICAgICAgICB2b2lkIHNldEV4
Y2VwdGlvbihKU0M6OkV4Y2VwdGlvbiopOwogCiAgICAgICAgIC8vIEFzeW5jIHJlcXVlc3QgdG8g
dGVybWluYXRlIGEgSlMgcnVuIGV4ZWN1dGlvbi4gRXZlbnR1YWxseSBjYXVzZXMgdGVybWluYXRp
b24KICAgICAgICAgLy8gZXhjZXB0aW9uIHJhaXNlZCBkdXJpbmcgSlMgZXhlY3V0aW9uLCBpZiB0
aGUgd29ya2VyIHRocmVhZCBoYXBwZW5zIHRvIHJ1biBKUy4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJl
dmlzaW9uIDE4NTI0NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlw
dERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCB2b2lkIFdv
cmtlclNjcmlwdERlYnVnU2VydmVyOjpydW5FdmVudExvCiAgICAgfSB3aGlsZSAocmVzdWx0ICE9
IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQgJiYgIW1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50
cyk7CiB9CiAKLXZvaWQgV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6OnJlcG9ydEV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbikgY29uc3QKK3ZvaWQg
V29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6OnJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbikgY29uc3QKIHsKICAgICBXZWJDb3JlOjpy
ZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuaAkocmV2aXNp
b24gMTg1MjQ2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVi
dWdTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kikgb3ZlcnJpZGUg
eyB9CiAgICAgdmlydHVhbCB2b2lkIHJ1bkV2ZW50TG9vcFdoaWxlUGF1c2VkKCkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudFNjcmlwdChKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0
aW9uKikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBXb3JrZXJHbG9iYWxTY29wZSogbV93b3JrZXJH
bG9iYWxTY29wZTsKICAgICBMaXN0ZW5lclNldCBtX2xpc3RlbmVyczsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZpc2lvbiAx
ODUyNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBAIGlkIGNyZWF0ZUpTV3JhcHBlcihK
U0M6OkpTT2JqZWN0KiBvYmplY3QKICAgICByZXR1cm4gW1tbV2ViU2NyaXB0T2JqZWN0IGFsbG9j
XSBfaW5pdFdpdGhKU09iamVjdDpvYmplY3Qgb3JpZ2luUm9vdE9iamVjdDpvcmlnaW4gcm9vdE9i
amVjdDpyb290XSBhdXRvcmVsZWFzZV07CiB9CiAKLXN0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRv
Q29uc29sZShFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSYgZXhjZXB0aW9uKQorc3RhdGlj
IHZvaWQgYWRkRXhjZXB0aW9uVG9Db25zb2xlKEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNlcHRp
b24qIGV4Y2VwdGlvbikKIHsKICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gYXNKU0RPTVdpbmRv
dyhleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkpOwogICAgIGlmICghd2luZG93IHx8ICFleGNl
cHRpb24pCkBAIC0xMzEsNyArMTMxLDcgQEAgc3RhdGljIHZvaWQgYWRkRXhjZXB0aW9uVG9Db25z
b2xlKEV4ZWNTdAogCiBzdGF0aWMgdm9pZCBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoRXhlY1N0YXRl
KiBleGVjKQogewotICAgIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24o
KTsKKyAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhl
YywgZXhjZXB0aW9uKTsKIH0KQEAgLTM0Miw4ICszNDIsOCBAQCAtIChpZCljYWxsV2ViU2NyaXB0
TWV0aG9kOihOU1N0cmluZyAqKW5hCiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEpTQzo6SlNWYWx1ZSBleGNlcHRpb247Ci0gICAgSlND
OjpKU1ZhbHVlIHJlc3VsdCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBmdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBbc2VsZiBfaW1wXSwgYXJnTGlzdCwgJmV4Y2VwdGlv
bik7CisgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbjsKKyAgICBKU0M6OkpTVmFsdWUgcmVz
dWx0ID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIFtzZWxmIF9pbXBdLCBhcmdMaXN0LCBleGNlcHRpb24pOwogCiAgICAgaWYg
KGV4Y2VwdGlvbikgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYywgZXhjZXB0
aW9uKTsKQEAgLTM2Niw3ICszNjYsNyBAQCAtIChpZClldmFsdWF0ZVdlYlNjcmlwdDooTlNTdHJp
bmcgKilzY3JpCiAKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKLSAgICBKU0M6
OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRlKGV4
ZWMsIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlwdCkpLCBKU0M6OkpTVmFsdWUoKSwgMCk7CisgICAg
SlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0
ZShleGVjLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQpKSwgSlNDOjpKU1ZhbHVlKCkpOwogCiAg
ICAgaWQgcmVzdWx0T2JqID0gW1dlYlNjcmlwdE9iamVjdCBfY29udmVydFZhbHVlVG9PYmpjVmFs
dWU6cmV0dXJuVmFsdWUgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2luUm9vdE9iamVjdF0g
cm9vdE9iamVjdDpbc2VsZiBfcm9vdE9iamVjdF1dOwogICAgIApJbmRleDogU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9u
IDE4NTI0NikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgYm9vbCBQYWdlU2NyaXB0
RGVidWdTZXJ2ZXI6OmlzQ29udGVudFNjcgogICAgIHJldHVybiAmY3VycmVudFdvcmxkKGV4ZWMp
ICE9ICZtYWluVGhyZWFkTm9ybWFsV29ybGQoKTsKIH0KIAotdm9pZCBQYWdlU2NyaXB0RGVidWdT
ZXJ2ZXI6OnJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXhjZXB0aW9u
KSBjb25zdAordm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJlcG9ydEV4Y2VwdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKSBjb25zdAogewogICAgIFdlYkNvcmU6
OnJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaAkocmV2aXNpb24gMTg1
MjQ2KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIGRpZENvbnRpbnVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgcnVuRXZlbnRMb29wV2hpbGVQYXVzZWQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IGJvb2wgaXNDb250ZW50U2NyaXB0KEpTQzo6RXhlY1N0YXRlKikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIHJ1bkV2ZW50TG9vcFdoaWxlUGF1c2VkSW50ZXJuYWwoKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDE4NTI0NikK
KysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTcsOSArMTk3LDkgQEAgdm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6aW1wb3J0
U2NyaXB0cyhjbwogCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0SW1w
b3J0ZWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBzY3JpcHRMb2FkZXItPmlkZW50aWZpZXIo
KSwgc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSk7CiAKLSAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUgZXhjZXB0aW9uOwotICAgICAgICBtX3NjcmlwdC0+ZXZhbHVhdGUoU2NyaXB0U291cmNl
Q29kZShzY3JpcHRMb2FkZXItPnNjcmlwdCgpLCBzY3JpcHRMb2FkZXItPnJlc3BvbnNlVVJMKCkp
LCAmZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKCFleGNlcHRpb24uaGFzTm9WYWx1ZSgpKSB7Cisg
ICAgICAgIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb247CisgICAgICAgIG1fc2NyaXB0LT5ldmFs
dWF0ZShTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdExvYWRlci0+c2NyaXB0KCksIHNjcmlwdExvYWRl
ci0+cmVzcG9uc2VVUkwoKSksIGV4Y2VwdGlvbik7CisgICAgICAgIGlmIChleGNlcHRpb24pIHsK
ICAgICAgICAgICAgIG1fc2NyaXB0LT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1MjQ2KQor
KysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTUtMDYtMDUgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAg
IGZpbmFsbHkgYmxvY2tzIHNob3VsZCBub3Qgc2V0IHRoZSBleGNlcHRpb24gc3RhY2sgdHJhY2Ug
d2hlbiByZS10aHJvd2luZyB0aGUgZXhjZXB0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1NTI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2Vv
ZmZyZXkgR2FyZW4uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnJlcG9ydEV4
Y2VwdGlvbik6CisgICAgICAgIC0gQ2hhbmdlZCB0byB1c2UgdGhlIG5ldyBFeGNlcHRpb24gb2Jq
ZWN0LgorCiAyMDE1LTA2LTAxICBKb24gSG9uZXljdXR0ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+
CiAKICAgICAgICAgW2lPU10gVXBsb2FkaW5nIGFuIGFuaW1hdGVkIEdJRiBmcm9tIHRoZSBwaG90
byBsaWJyYXJ5IHVwbG9hZHMgYSBKUEVHCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2
aXNpb24gMTg1MjQ2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKICNp
bmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Bvb2xNZXNzYWdlcy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9FeGNlcHRpb24uaD4KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGUuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CkBAIC01MjIsNyAr
NTIzLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9uKEpTQwogICAgIGlm
ICghdG9KU0RPTVdpbmRvdyhleGVjU3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbihleGVjU3RhdGUsIHRv
SlMoZXhlY1N0YXRlLCBleGNlcHRpb24pKTsKKyAgICBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24o
ZXhlY1N0YXRlLCBFeGNlcHRpb246OmNhc3QodG9KUyhleGVjU3RhdGUsIGV4Y2VwdGlvbikpKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkQ3JlYXRlUGFnZShXZWJQYWdlKiBwYWdlKQpJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDYtMDUg
IE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIGZpbmFsbHkgYmxvY2tz
IHNob3VsZCBub3Qgc2V0IHRoZSBleGNlcHRpb24gc3RhY2sgdHJhY2Ugd2hlbiByZS10aHJvd2lu
ZyB0aGUgZXhjZXB0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ1NTI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisK
KyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgrW1dlYlZpZXcgX3JlcG9y
dEV4Y2VwdGlvbjppbkNvbnRleHQ6XSk6CisgICAgICAgIChXZWJLaXRJbml0aWFsaXplQXBwbGlj
YXRpb25DYWNoZVBhdGhJZk5lY2Vzc2FyeSk6CisgICAgICAgIC0gQ2hhbmdlZCB0byB1c2UgdGhl
IG5ldyBFeGNlcHRpb24gb2JqZWN0LgorCiAyMDE1LTA2LTAzICBBbmRlcnMgQ2FybHNzb24gIDxh
bmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRGVmaW5lIFdLX0VOQUJMRV9GT1JNQUxfREVM
RUdBVEVfUFJPVE9DT0xTIG9uIGlPUwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
dy5tbQkocmV2aXNpb24gMTg1MjQ2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcgQEAKICNpbXBvcnQgPENvcmVG
b3VuZGF0aW9uL0NGU2V0Lmg+CiAjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMQ29ubmVjdGlvbi5o
PgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvRXhjZXB0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9BbmltYXRpb25Db250cm9sbGVyLmg+CkBAIC03MjQsNyArNzI1LDggQEAgKyAo
dm9pZClfcmVwb3J0RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4YwogICAgIGlmICghdG9KU0RPTVdp
bmRvdyhleGVjU3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjU3RhdGUsIHRvSlMoZXhlY1N0YXRlLCBleGNlcHRp
b24pKTsKKyAgICBFeGNlcHRpb24qIHZtRXhjZXB0aW9uID0gRXhjZXB0aW9uOjpjYXN0KHRvSlMo
ZXhlY1N0YXRlLCBleGNlcHRpb24pKTsKKyAgICByZXBvcnRFeGNlcHRpb24oZXhlY1N0YXRlLCB2
bUV4Y2VwdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIFdlYktpdEluaXRpYWxpemVBcHBsaWNhdGlv
bkNhY2hlUGF0aElmTmVjZXNzYXJ5KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4
NTI0NikKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE0IEBACisyMDE1LTA2LTA1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4K
KworICAgICAgICBmaW5hbGx5IGJsb2NrcyBzaG91bGQgbm90IHNldCB0aGUgZXhjZXB0aW9uIHN0
YWNrIHRyYWNlIHdoZW4gcmUtdGhyb3dpbmcgdGhlIGV4Y2VwdGlvbi4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTUyNQorCisgICAgICAgIFJldmll
d2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAg
IChXZWJWaWV3OjpyZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAtIENoYW5nZWQgdG8gdXNlIHRo
ZSBuZXcgRXhjZXB0aW9uIG9iamVjdC4KKwogMjAxNS0wNi0wMiAgQnJhZHkgRWlkc29uICA8YmVp
ZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0IHBvbGljeSBkZWxlZ2F0ZSBzaG91bGQg
c3VnZ2VzdCBpZiBhIG5hdmlnYXRpb24gc2hvdWxkIGJlIGFsbG93ZWQgdG8gb3BlbiBVUkxzIGV4
dGVybmFsbHkuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMTg1MjQ2KQorKysg
U291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcy
LDcgQEAKICNpbmNsdWRlICJXZWJWaXNpdGVkTGlua1N0b3JlLmgiCiAjaW5jbHVkZSAicmVzb3Vy
Y2UuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvRXhjZXB0aW9uLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlh
bGl6ZVRocmVhZGluZy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0pTVmFsdWUuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KQEAgLTYwMjksNyArNjAzMCw4IEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6cmVwb3IKICAgICBpZiAoIXRvSlNE
T01XaW5kb3coZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKQogICAgICAgICByZXR1
cm4gRV9GQUlMOwogCi0gICAgV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgdG9K
UyhleGVjU3RhdGUsIGV4Y2VwdGlvbikpOworICAgIEpTQzo6RXhjZXB0aW9uKiB2bUV4Y2VwdGlv
biA9IEpTQzo6RXhjZXB0aW9uOjpjYXN0KHRvSlMoZXhlY1N0YXRlLCBleGNlcHRpb24pKTsKKyAg
ICBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24oZXhlY1N0YXRlLCB2bUV4Y2VwdGlvbik7CiAgICAg
cmV0dXJuIFNfT0s7CiB9CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTI1MikKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBACisyMDE1LTA2LTA1
ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBmaW5hbGx5IGJsb2Nr
cyBzaG91bGQgbm90IHNldCB0aGUgZXhjZXB0aW9uIHN0YWNrIHRyYWNlIHdoZW4gcmUtdGhyb3dp
bmcgdGhlIGV4Y2VwdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NTUyNQorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgor
CisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgLSBTa2lwIHRoZSBuZXcgdGVz
dHMgdW50aWwgd2Via2l0Lm9yZy9iLzE0NTA5MCBpcyBmaXhlZC4KKworICAgICAgICAqIGZhc3Qv
ZG9tL3JlZ3Jlc3MtMTMxNTMwLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgLSBSZWJhc2VkIHJlc3Vs
dHMgYmVjYXVzZSB3ZSBub3cgaGF2ZSBhIHByb3BlciBsaW5lIG51bWJlci4KKworICAgICAgICAq
IGh0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzOgorICAgICAgICAoSW5zcGVj
dG9yVGVzdFByb3h5LmNsZWFyUmVzdWx0cyk6CisgICAgICAgIChJbnNwZWN0b3JUZXN0UHJveHku
cmVwb3J0VW5jYXVnaHRFeGNlcHRpb24pOgorICAgICAgICAtIEFkZCB0aGUgZmVhdHVyZSB0byBz
YW5pdGl6ZSB0aGUgdXJsIHJlcG9ydGVkIGJ5IHJlcG9ydFVuY2F1Z2h0RXhjZXB0aW9uKCkgc2lu
Y2UKKyAgICAgICAgICB3ZSBjYW4gaGF2ZSB0ZXN0cyB0aGF0IGRvIGV4cGVjdCB1bmNhdWdodCBl
eGNlcHRpb25zLCBhbmQgd2UgbmVlZCB0aGUgdGVzdAorICAgICAgICAgIHJlc3VsdHMgdG8gYmUg
aW52YXJpYW50LiAgU2FuaXRpemF0aW9uIG9mIHRoZSB1cmwsIGluIHRoaXMgY2FzZSBtZWFucywg
c3RyaXBwaW5nCisgICAgICAgICAgb2ZmIHRoZSBwcmVjZWRpbmcgcGF0aC4KKworICAgICAgICAq
IGluc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24tZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24t
Y2F0Y2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIv
YnJlYWstb24tZXhjZXB0aW9uLWNhdGNoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rv
ci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24tZmluYWxseS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24tZmluYWxs
eS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhj
ZXB0aW9uLW5hdGl2ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9k
ZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24tbmF0aXZlLmh0bWw6IEFkZGVkLgorCisgICAgICAg
ICogaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNl
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFr
LW9uLWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGlu
c3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS13aXRo
LWNhdGNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2Vy
L2JyZWFrLW9uLWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXdpdGgtY2F0Y2guaHRtbDogQWRk
ZWQuCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi10aHJv
dy1pbi1wcm9taXNlLXRoZW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0
b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLXRocm93LWluLXByb21pc2UtdGhlbi5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9u
LXRocm93LWluLXByb21pc2UtdGhlbi13aXRoLWNhdGNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi10aHJvdy1pbi1w
cm9taXNlLXRoZW4td2l0aC1jYXRjaC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLXRocm93LWluLXByb21pc2UtcmV0aHJvdy1pbi1j
YXRjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9i
cmVhay1vbi1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS1yZXRocm93LWluLWNhdGNoLmh0bWw6
IEFkZGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlv
bi13aW5kb3ctb25lcnJvci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rv
ci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24td2luZG93LW9uZXJyb3IuaHRtbDogQWRkZWQu
CisKKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0
aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL2Jy
ZWFrLW9uLXVuY2F1Z2h0LWV4Y2VwdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0
b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLWNhdGNoLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0
LWV4Y2VwdGlvbi1jYXRjaC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdn
ZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLWZpbmFsbHktZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0
aW9uLWZpbmFsbHkuaHRtbDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL2Jy
ZWFrLW9uLXVuY2F1Z2h0LWV4Y2VwdGlvbi1uYXRpdmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLW5h
dGl2ZS5odG1sOiBBZGRlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1v
bi11bmNhdWdodC1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi11bmNhdWdodC1leGNlcHRp
b24tdGhyb3ctaW4tcHJvbWlzZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZGVi
dWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLXRocm93LWluLXByb21pc2Utd2l0aC1j
YXRjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9i
cmVhay1vbi11bmNhdWdodC1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS13aXRoLWNhdGNoLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi11bmNhdWdo
dC1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS10aGVuLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0LWV4Y2VwdGlvbi10
aHJvdy1pbi1wcm9taXNlLXRoZW4uaHRtbDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2Rl
YnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0LWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXRoZW4t
d2l0aC1jYXRjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1
Z2dlci9icmVhay1vbi11bmNhdWdodC1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS10aGVuLXdp
dGgtY2F0Y2guaHRtbDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFr
LW9uLXVuY2F1Z2h0LWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXJldGhyb3ctaW4tY2F0Y2gt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvYnJlYWst
b24tdW5jYXVnaHQtZXhjZXB0aW9uLXRocm93LWluLXByb21pc2UtcmV0aHJvdy1pbi1jYXRjaC5o
dG1sOiBBZGRlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi11bmNh
dWdodC1leGNlcHRpb24td2luZG93LW9uZXJyb3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLXdpbmRv
dy1vbmVycm9yLmh0bWw6IEFkZGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL3Jl
c291cmNlcy9icmVhay1vbi1leGNlcHRpb24tdGVzdHMuanM6IEFkZGVkLgorICAgICAgICAoZG9U
aHJvdyk6CisgICAgICAgICh0ZXN0Q2F0Y2gpOgorICAgICAgICAodGVzdEZpbmFsbHkpOgorICAg
ICAgICAodGVzdFRocm93aW5nVGhydU5hdGl2ZUNvZGUpOgorICAgICAgICAodGVzdFRocm93aW5n
SW5Qcm9taXNlKToKKyAgICAgICAgKHRlc3RUaHJvd2luZ0luUHJvbWlzZVdpdGhDYXRjaCk6Cisg
ICAgICAgICh0ZXN0VGhyb3dpbmdJblByb21pc2VUaGVuKToKKyAgICAgICAgKHRlc3RUaHJvd2lu
Z0luUHJvbWlzZVRoZW5XaXRoQ2F0Y2gpOgorICAgICAgICAodGVzdFRocm93aW5nSW5Qcm9taXNl
V2l0aFJldGhyb3dJbkNhdGNoKToKKwogMjAxNS0wNi0wNSAgWmFsYW4gQnVqdGFzICA8emFsYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIE1hc2sgbGF5ZXIgbm93IGlzIHBhcnQgb2YgdGhl
IGxheWVyIHRyZWUgb3V0cHV0LgpJbmRleDogTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAxODUy
NDYpCisrKyBMYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC01
MjgsMyArNTI4LDI1IEBAIHdlYmtpdC5vcmcvYi8xNDUzOTAgc3RvcmFnZS9pbmRleGVkZGIvZGUK
IAogd2Via2l0Lm9yZy9iLzE0NTY3NSBmdWxsc2NyZWVuL3ZpZGVvLWNvbnRyb2xzLWRyYWcuaHRt
bCBbIFNraXAgXQogd2Via2l0Lm9yZy9iLzE0NTY3NSBtZWRpYS92aWRlby1mdWxsc2NyZWVlbi1v
bmx5LWNvbnRyb2xzLmh0bWwgWyBTa2lwIF0KKword2Via2l0Lm9yZy9iLzE0NTA5MCBpbnNwZWN0
b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcv
Yi8xNDUwOTAgaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi1jYXRjaC5odG1s
IFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMTQ1MDkwIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1v
bi1leGNlcHRpb24tZmluYWxseS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMTQ1MDkwIGlu
c3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24tbmF0aXZlLmh0bWwgWyBTa2lwIF0K
K3dlYmtpdC5vcmcvYi8xNDUwOTAgaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlv
bi10aHJvdy1pbi1wcm9taXNlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8xNDUwOTAgaW5z
cGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXdpdGgt
Y2F0Y2guaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzE0NTA5MCBpbnNwZWN0b3IvZGVidWdn
ZXIvYnJlYWstb24tZXhjZXB0aW9uLXRocm93LWluLXByb21pc2UtdGhlbi5odG1sIFsgU2tpcCBd
Cit3ZWJraXQub3JnL2IvMTQ1MDkwIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRp
b24tdGhyb3ctaW4tcHJvbWlzZS10aGVuLXdpdGgtY2F0Y2guaHRtbCBbIFNraXAgXQord2Via2l0
Lm9yZy9iLzE0NTA5MCBpbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLXRocm93
LWluLXByb21pc2UtcmV0aHJvdy1pbi1jYXRjaC5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2Iv
MTQ1MDkwIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24td2luZG93LW9uZXJy
b3IuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzE0NTA5MCBpbnNwZWN0b3IvZGVidWdnZXIv
YnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8x
NDUwOTAgaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0LWV4Y2VwdGlvbi1jYXRj
aC5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMTQ1MDkwIGluc3BlY3Rvci9kZWJ1Z2dlci9i
cmVhay1vbi11bmNhdWdodC1leGNlcHRpb24tZmluYWxseS5odG1sIFsgU2tpcCBdCit3ZWJraXQu
b3JnL2IvMTQ1MDkwIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi11bmNhdWdodC1leGNlcHRp
b24tbmF0aXZlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8xNDUwOTAgaW5zcGVjdG9yL2Rl
YnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0LWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLmh0bWwg
WyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8xNDUwOTAgaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9u
LXVuY2F1Z2h0LWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXdpdGgtY2F0Y2guaHRtbCBbIFNr
aXAgXQord2Via2l0Lm9yZy9iLzE0NTA5MCBpbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5j
YXVnaHQtZXhjZXB0aW9uLXRocm93LWluLXByb21pc2UtdGhlbi5odG1sIFsgU2tpcCBdCit3ZWJr
aXQub3JnL2IvMTQ1MDkwIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi11bmNhdWdodC1leGNl
cHRpb24tdGhyb3ctaW4tcHJvbWlzZS10aGVuLXdpdGgtY2F0Y2guaHRtbCBbIFNraXAgXQord2Vi
a2l0Lm9yZy9iLzE0NTA5MCBpbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhj
ZXB0aW9uLXRocm93LWluLXByb21pc2UtcmV0aHJvdy1pbi1jYXRjaC5odG1sIFsgU2tpcCBdCit3
ZWJraXQub3JnL2IvMTQ1MDkwIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi11bmNhdWdodC1l
eGNlcHRpb24td2luZG93LW9uZXJyb3IuaHRtbCBbIFNraXAgXQorCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9yZWdyZXNzLTEzMTUzMC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9kb20vcmVncmVzcy0xMzE1MzAtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAx
ODUyNDYpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZWdyZXNzLTEzMTUzMC1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiBDT05TT0xFIE1FU1NBR0U6IGxpbmUg
NTogRXhjZXB0aW9uIHRvIHRyaWdnZXIgdW53aW5kaW5nIGluIE11dGF0aW9uT2JzZXJ2ZXIKLUNP
TlNPTEUgTUVTU0FHRTogUGVuZGluZyBleGNlcHRpb24gYmVmb3JlIE11dGF0aW9uT2JzZXJ2ZXJz
IGFyZSBjYWxsZWQuCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMjI6IFBlbmRpbmcgZXhjZXB0aW9u
IGJlZm9yZSBNdXRhdGlvbk9ic2VydmVycyBhcmUgY2FsbGVkLgogUmVncmVzc2lvbiB0ZXN0IGZv
ciBodHRwczovL3dlYmtpdC5vcmcvYi8xMzE1MzAuIFRoaXMgdGVzdCBzaG91bGQgbm90IGNyYXNo
LgogCiBNdXRhdGUgdGhhdCBub2RlCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3Bl
Y3Rvci9pbnNwZWN0b3ItdGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcwkocmV2aXNpb24gMTg1MjQ2KQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Myw4ICsxNDMsMjAgQEAgSW5zcGVjdG9yVGVzdFByb3h5LmNsZWFyUmVzdWx0
cyA9IGZ1bmN0aQogICAgIH0KIH0KIAorSW5zcGVjdG9yVGVzdFByb3h5Lm5lZWRUb1Nhbml0aXpl
VW5jYXVnaHRFeGNlcHRpb25VcmxzID0gZmFsc2U7CisKIEluc3BlY3RvclRlc3RQcm94eS5yZXBv
cnRVbmNhdWdodEV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHVybCwgbGluZU51bWJlcikK
IHsKKyAgICBpZiAoSW5zcGVjdG9yVGVzdFByb3h5Lm5lZWRUb1Nhbml0aXplVW5jYXVnaHRFeGNl
cHRpb25VcmxzKSB7CisgICAgICAgIGlmICh0eXBlb2YgdXJsID09ICJzdHJpbmciKSB7CisgICAg
ICAgICAgICB2YXIgbGFzdFNsYXNoID0gdXJsLmxhc3RJbmRleE9mKCcvJyk7CisgICAgICAgICAg
ICB2YXIgbGFzdEJhY2tTbGFzaCA9IHVybC5sYXN0SW5kZXhPZignXFwnKTsKKyAgICAgICAgICAg
IHZhciBsYXN0UGF0aFNlcGFyYXRvciA9IE1hdGgubWF4KGxhc3RTbGFzaCwgbGFzdEJhY2tTbGFz
aCk7CisgICAgICAgICAgICBpZiAobGFzdFBhdGhTZXBhcmF0b3IgPiAwKQorICAgICAgICAgICAg
ICAgIHVybCA9IHVybC5zdWJzdHIobGFzdFBhdGhTZXBhcmF0b3IgKyAxKTsKKyAgICAgICAgfQor
ICAgIH0KKwogICAgIHZhciByZXN1bHQgPSAiVW5jYXVnaHQgZXhjZXB0aW9uIGluIHRlc3QgcGFn
ZTogIiArIG1lc3NhZ2UgKyAiIFsiICsgdXJsICsgIjoiICsgbGluZU51bWJlciArICJdIjsKICAg
ICBJbnNwZWN0b3JUZXN0UHJveHkuYWRkUmVzdWx0KHJlc3VsdCk7CiAgICAgSW5zcGVjdG9yVGVz
dFByb3h5LmNvbXBsZXRlVGVzdCgpOwpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVn
Z2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi1jYXRjaC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi1jYXRjaC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdn
ZXIvYnJlYWstb24tZXhjZXB0aW9uLWNhdGNoLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDggQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxMjogdGVzdENhdGNoCitDT05T
T0xFIE1FU1NBR0U6IGxpbmUgNzogdGhyb3dpbmcgVGVzdEVycm9yCitDT05TT0xFIE1FU1NBR0U6
IGxpbmUgMTY6IGNhdGNoIFRlc3RFcnJvcgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE4OiBET05F
CitDaGVja2luZyBwYXVzZSBsb2NhdGlvbnMgd2hlbiBwYXVzaW5nIG9uIGFsbCBleGNlcHRpb25z
LgorCitQQVVTRSAjMSBBVDogZG9UaHJvdzo4OjIyCisKSW5kZXg6IExheW91dFRlc3RzL2luc3Bl
Y3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24tY2F0Y2guaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLWNhdGNo
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJl
YWstb24tZXhjZXB0aW9uLWNhdGNoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBA
QAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3Qu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9yZXNv
dXJjZXMvYnJlYWstb24tZXhjZXB0aW9uLXRlc3RzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citm
dW5jdGlvbiB0ZXN0KCkgeworICAgIGZ1bmN0aW9uIGRvRXhjZXB0aW9uVGVzdCh0ZXN0TmFtZSwg
ZXhjZXB0aW9uQnJlYWtUeXBlLCByZXN1bWVBY3Rpb24pCisgICAgeworICAgICAgICB2YXIgcGF1
c2VzID0gMDsKKyAgICAgICAgdmFyIGluZGV4ID0gMDsKKworICAgICAgICBmdW5jdGlvbiBydW5U
ZXN0Q2FzZSh0ZXN0KSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdl
KCJzZXRUaW1lb3V0KCIgKyB0ZXN0ICsgIiwgNTApIik7CisgICAgICAgIH0KKworICAgICAgICBX
ZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyTWFuYWdlci5FdmVudC5TY3JpcHRBZGRlZCwgZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICAgICAgICAgIHZhciBzY3JpcHRPYmplY3QgPSBldmVudC5kYXRhLnNjcmlwdDsKKyAgICAgICAg
ICAgIGlmICghL2JyZWFrLW9uLWV4Y2VwdGlvbi10ZXN0c1wuanMkLy50ZXN0KHNjcmlwdE9iamVj
dC51cmwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGV4Y2Vw
dGlvbkJyZWFrVHlwZSA9PSAnQWxsRXhjZXB0aW9ucycpCisgICAgICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hbGxFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNhYmxlZCA9
IGZhbHNlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5k
ZWJ1Z2dlck1hbmFnZXIuYWxsVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNhYmxlZCA9
IGZhbHNlOworCisgICAgICAgICAgICBydW5UZXN0Q2FzZSh0ZXN0TmFtZSk7CisgICAgICAgIH0p
OworCisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkNhbGxGcmFtZXNEaWRDaGFuZ2Us
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2YXIgY2FsbEZyYW1lID0gV2ViSW5zcGVj
dG9yLmRlYnVnZ2VyTWFuYWdlci5hY3RpdmVDYWxsRnJhbWU7CisgICAgICAgICAgICBpZiAoY2Fs
bEZyYW1lKSB7CisgICAgICAgICAgICAgICAgLy8gUGF1c2luZy4KKyAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmFzc2VydChXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnBhdXNlUmVh
c29uID09ICJleGNlcHRpb24iKTsKKworICAgICAgICAgICAgICAgIHZhciBmdW5jTmFtZSA9IGNh
bGxGcmFtZS5mdW5jdGlvbk5hbWUgfHwgIjxhbm9ueW1vdXM+IjsKKyAgICAgICAgICAgICAgICB2
YXIgbG9jYXRpb24gPSBjYWxsRnJhbWUuc291cmNlQ29kZUxvY2F0aW9uOworICAgICAgICAgICAg
ICAgIHZhciBsaW5lID0gbG9jYXRpb24ubGluZU51bWJlciArIDE7CisgICAgICAgICAgICAgICAg
dmFyIGNvbHVtbiA9IGxvY2F0aW9uLmNvbHVtbk51bWJlciArIDE7CisKKyAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmxvZygiUEFVU0UgIyIgKyAoKytwYXVzZXMpICsgIiBBVDogIiArIGZ1
bmNOYW1lICsgIjoiICsgbGluZSArICI6IiArIGNvbHVtbik7CisgICAgICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5yZXN1bWUoKTsKKworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAvLyBSZXN1bWluZy4KKyAgICAgICAgICAgICAgICBpZiAocmVz
dW1lQWN0aW9uID09ICdGaW5pc2hPblJlc3VtZScpCisgICAgICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuY29tcGxldGVUZXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisg
ICAgICAgIC8vIFRoaXMgaXMgYSBzaWduYWwgbWVjaGFuaXNtIGZvciB0aGUgd2ViIHByb2Nlc3Mg
dG8gdGVsbCB1cyB0aGF0IHRoZSB0ZXN0IGlzIGRvbmUuCisgICAgICAgIC8vIFRoZSB3ZWIgcHJv
Y2VzcyBmaXJlcyB0aGUgc2lnbmFsIGJ5IGRvaW5nIGNvbnNvbGUubG9nKCJET05FIikuCisgICAg
ICAgIFdlYkluc3BlY3Rvci5sb2dNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LkxvZ01hbmFnZXIuRXZlbnQuTWVzc2FnZUFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAg
ICAgICAgdmFyIG1lc3NhZ2UgPSBldmVudC5kYXRhLm1lc3NhZ2U7CisgICAgICAgICAgICBpZiAo
IW1lc3NhZ2UucGFyYW1ldGVycyB8fCBtZXNzYWdlLnBhcmFtZXRlcnMubGVuZ3RoICE9PSAxKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlLnBhcmFtZXRl
cnNbMF0udHlwZSAhPT0gInN0cmluZyIgfHwgbWVzc2FnZS5wYXJhbWV0ZXJzWzBdLmRlc2NyaXB0
aW9uICE9PSAiRE9ORSIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgSW5zcGVj
dG9yVGVzdC5yZWxvYWRQYWdlKCk7CisgICAgfQorCisgICAgZG9FeGNlcHRpb25UZXN0KCd0ZXN0
Q2F0Y2gnLCAnQWxsRXhjZXB0aW9ucycsICdJZ25vcmVSZXN1bWUnKTsKK30KKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDxwPkNoZWNraW5nIHBhdXNl
IGxvY2F0aW9ucyB3aGVuIHBhdXNpbmcgb24gYWxsIGV4Y2VwdGlvbnMuPC9wPgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4
Y2VwdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcgQEAKK0NPTlNPTEUgTUVTU0FHRTog
bGluZSA3OiB0aHJvd2luZyBUZXN0RXJyb3IKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA4OiBUZXN0
RXJyb3IKK0NoZWNraW5nIHBhdXNlIGxvY2F0aW9ucyB3aGVuIHBhdXNpbmcgb24gYWxsIGV4Y2Vw
dGlvbnMuCisKK1BBVVNFICMxIEFUOiBkb1Rocm93Ojg6MjIKK1VuY2F1Z2h0IGV4Y2VwdGlvbiBp
biB0ZXN0IHBhZ2U6IFRlc3RFcnJvciBbYnJlYWstb24tZXhjZXB0aW9uLXRlc3RzLmpzOjhdCisK
SW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24t
ZmluYWxseS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi1maW5hbGx5LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRp
b24tZmluYWxseS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5IEBACitD
T05TT0xFIE1FU1NBR0U6IGxpbmUgMjI6IHRlc3RGaW5hbGx5CitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgNzogdGhyb3dpbmcgVGVzdEVycm9yCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMjY6IGZpbmFs
bHkKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA4OiBUZXN0RXJyb3IKK0NoZWNraW5nIHBhdXNlIGxv
Y2F0aW9ucyB3aGVuIHBhdXNpbmcgb24gYWxsIGV4Y2VwdGlvbnMuCisKK1BBVVNFICMxIEFUOiBk
b1Rocm93Ojg6MjIKK1VuY2F1Z2h0IGV4Y2VwdGlvbiBpbiB0ZXN0IHBhZ2U6IFRlc3RFcnJvciBb
YnJlYWstb24tZXhjZXB0aW9uLXRlc3RzLmpzOjhdCisKSW5kZXg6IExheW91dFRlc3RzL2luc3Bl
Y3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24tZmluYWxseS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24tZmlu
YWxseS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2Vy
L2JyZWFrLW9uLWV4Y2VwdGlvbi1maW5hbGx5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MiBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9y
LXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i
Li9yZXNvdXJjZXMvYnJlYWstb24tZXhjZXB0aW9uLXRlc3RzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+CitmdW5jdGlvbiB0ZXN0KCkgeworICAgIGZ1bmN0aW9uIGRvRXhjZXB0aW9uVGVzdCh0ZXN0
TmFtZSwgZXhjZXB0aW9uQnJlYWtUeXBlLCByZXN1bWVBY3Rpb24pCisgICAgeworICAgICAgICB2
YXIgcGF1c2VzID0gMDsKKyAgICAgICAgdmFyIGluZGV4ID0gMDsKKworICAgICAgICBmdW5jdGlv
biBydW5UZXN0Q2FzZSh0ZXN0KSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRl
SW5QYWdlKCJzZXRUaW1lb3V0KCIgKyB0ZXN0ICsgIiwgNTApIik7CisgICAgICAgIH0KKworICAg
ICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5TY3JpcHRBZGRlZCwgZnVuY3Rpb24oZXZlbnQp
IHsKKyAgICAgICAgICAgIHZhciBzY3JpcHRPYmplY3QgPSBldmVudC5kYXRhLnNjcmlwdDsKKyAg
ICAgICAgICAgIGlmICghL2JyZWFrLW9uLWV4Y2VwdGlvbi10ZXN0c1wuanMkLy50ZXN0KHNjcmlw
dE9iamVjdC51cmwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYg
KGV4Y2VwdGlvbkJyZWFrVHlwZSA9PSAnQWxsRXhjZXB0aW9ucycpCisgICAgICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hbGxFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNh
YmxlZCA9IGZhbHNlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWxsVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNh
YmxlZCA9IGZhbHNlOworCisgICAgICAgICAgICBydW5UZXN0Q2FzZSh0ZXN0TmFtZSk7CisgICAg
ICAgIH0pOworCisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkNhbGxGcmFtZXNEaWRD
aGFuZ2UsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2YXIgY2FsbEZyYW1lID0gV2Vi
SW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hY3RpdmVDYWxsRnJhbWU7CisgICAgICAgICAgICBp
ZiAoY2FsbEZyYW1lKSB7CisgICAgICAgICAgICAgICAgLy8gUGF1c2luZy4KKyAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnBh
dXNlUmVhc29uID09ICJleGNlcHRpb24iKTsKKworICAgICAgICAgICAgICAgIHZhciBmdW5jTmFt
ZSA9IGNhbGxGcmFtZS5mdW5jdGlvbk5hbWUgfHwgIjxhbm9ueW1vdXM+IjsKKyAgICAgICAgICAg
ICAgICB2YXIgbG9jYXRpb24gPSBjYWxsRnJhbWUuc291cmNlQ29kZUxvY2F0aW9uOworICAgICAg
ICAgICAgICAgIHZhciBsaW5lID0gbG9jYXRpb24ubGluZU51bWJlciArIDE7CisgICAgICAgICAg
ICAgICAgdmFyIGNvbHVtbiA9IGxvY2F0aW9uLmNvbHVtbk51bWJlciArIDE7CisKKyAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUEFVU0UgIyIgKyAoKytwYXVzZXMpICsgIiBBVDog
IiArIGZ1bmNOYW1lICsgIjoiICsgbGluZSArICI6IiArIGNvbHVtbik7CisgICAgICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5yZXN1bWUoKTsKKworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBSZXN1bWluZy4KKyAgICAgICAgICAgICAgICBp
ZiAocmVzdW1lQWN0aW9uID09ICdGaW5pc2hPblJlc3VtZScpCisgICAgICAgICAgICAgICAgICAg
IEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworCisgICAgICAgIC8vIFRoaXMgaXMgYSBzaWduYWwgbWVjaGFuaXNtIGZvciB0aGUgd2ViIHBy
b2Nlc3MgdG8gdGVsbCB1cyB0aGF0IHRoZSB0ZXN0IGlzIGRvbmUuCisgICAgICAgIC8vIFRoZSB3
ZWIgcHJvY2VzcyBmaXJlcyB0aGUgc2lnbmFsIGJ5IGRvaW5nIGNvbnNvbGUubG9nKCJET05FIiku
CisgICAgICAgIFdlYkluc3BlY3Rvci5sb2dNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLkxvZ01hbmFnZXIuRXZlbnQuTWVzc2FnZUFkZGVkLCBmdW5jdGlvbihldmVudCkgewor
ICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBldmVudC5kYXRhLm1lc3NhZ2U7CisgICAgICAgICAg
ICBpZiAoIW1lc3NhZ2UucGFyYW1ldGVycyB8fCBtZXNzYWdlLnBhcmFtZXRlcnMubGVuZ3RoICE9
PSAxKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlLnBh
cmFtZXRlcnNbMF0udHlwZSAhPT0gInN0cmluZyIgfHwgbWVzc2FnZS5wYXJhbWV0ZXJzWzBdLmRl
c2NyaXB0aW9uICE9PSAiRE9ORSIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
SW5zcGVjdG9yVGVzdC5yZWxvYWRQYWdlKCk7CisgICAgfQorCisgICAgZG9FeGNlcHRpb25UZXN0
KCd0ZXN0RmluYWxseScsICdBbGxFeGNlcHRpb25zJywgJ0lnbm9yZVJlc3VtZScpOworfQorPC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgPHA+Q2hlY2tp
bmcgcGF1c2UgbG9jYXRpb25zIHdoZW4gcGF1c2luZyBvbiBhbGwgZXhjZXB0aW9ucy48L3A+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJl
YWstb24tZXhjZXB0aW9uLW5hdGl2ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi1uYXRpdmUtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2Jy
ZWFrLW9uLWV4Y2VwdGlvbi1uYXRpdmUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOCBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDMxOiB0ZXN0VGhyb3dpbmdUaHJ1TmF0
aXZlQ29kZQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDc6IHRocm93aW5nIFRlc3RFcnJvcgorQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDg6IFRlc3RFcnJvcgorQ2hlY2tpbmcgcGF1c2UgbG9jYXRpb25z
IHdoZW4gcGF1c2luZyBvbiBhbGwgZXhjZXB0aW9ucy4KKworUEFVU0UgIzEgQVQ6IGRvVGhyb3c6
ODoyMgorVW5jYXVnaHQgZXhjZXB0aW9uIGluIHRlc3QgcGFnZTogVGVzdEVycm9yIFticmVhay1v
bi1leGNlcHRpb24tdGVzdHMuanM6OF0KKwpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Rl
YnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi1uYXRpdmUuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLW5hdGl2ZS5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9u
LWV4Y2VwdGlvbi1uYXRpdmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACis8
IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL3Jlc291cmNl
cy9icmVhay1vbi1leGNlcHRpb24tdGVzdHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0
aW9uIHRlc3QoKSB7CisgICAgZnVuY3Rpb24gZG9FeGNlcHRpb25UZXN0KHRlc3ROYW1lLCBleGNl
cHRpb25CcmVha1R5cGUsIHJlc3VtZUFjdGlvbikKKyAgICB7CisgICAgICAgIHZhciBwYXVzZXMg
PSAwOworICAgICAgICB2YXIgaW5kZXggPSAwOworCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RD
YXNlKHRlc3QpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoInNl
dFRpbWVvdXQoIiArIHRlc3QgKyAiLCA1MCkiKTsKKyAgICAgICAgfQorCisgICAgICAgIFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVi
dWdnZXJNYW5hZ2VyLkV2ZW50LlNjcmlwdEFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAg
ICAgICAgdmFyIHNjcmlwdE9iamVjdCA9IGV2ZW50LmRhdGEuc2NyaXB0OworICAgICAgICAgICAg
aWYgKCEvYnJlYWstb24tZXhjZXB0aW9uLXRlc3RzXC5qcyQvLnRlc3Qoc2NyaXB0T2JqZWN0LnVy
bCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoZXhjZXB0aW9u
QnJlYWtUeXBlID09ICdBbGxFeGNlcHRpb25zJykKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0
b3IuZGVidWdnZXJNYW5hZ2VyLmFsbEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFs
c2U7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTWFuYWdlci5hbGxVbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFs
c2U7CisKKyAgICAgICAgICAgIHJ1blRlc3RDYXNlKHRlc3ROYW1lKTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQ2FsbEZyYW1lc0RpZENoYW5nZSwgZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIHZhciBjYWxsRnJhbWUgPSBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNYW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZTsKKyAgICAgICAgICAgIGlmIChjYWxsRnJh
bWUpIHsKKyAgICAgICAgICAgICAgICAvLyBQYXVzaW5nLgorICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuYXNzZXJ0KFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VSZWFzb24g
PT0gImV4Y2VwdGlvbiIpOworCisgICAgICAgICAgICAgICAgdmFyIGZ1bmNOYW1lID0gY2FsbEZy
YW1lLmZ1bmN0aW9uTmFtZSB8fCAiPGFub255bW91cz4iOworICAgICAgICAgICAgICAgIHZhciBs
b2NhdGlvbiA9IGNhbGxGcmFtZS5zb3VyY2VDb2RlTG9jYXRpb247CisgICAgICAgICAgICAgICAg
dmFyIGxpbmUgPSBsb2NhdGlvbi5saW5lTnVtYmVyICsgMTsKKyAgICAgICAgICAgICAgICB2YXIg
Y29sdW1uID0gbG9jYXRpb24uY29sdW1uTnVtYmVyICsgMTsKKworICAgICAgICAgICAgICAgIElu
c3BlY3RvclRlc3QubG9nKCJQQVVTRSAjIiArICgrK3BhdXNlcykgKyAiIEFUOiAiICsgZnVuY05h
bWUgKyAiOiIgKyBsaW5lICsgIjoiICsgY29sdW1uKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNw
ZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnJlc3VtZSgpOworCisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIC8vIFJlc3VtaW5nLgorICAgICAgICAgICAgICAgIGlmIChyZXN1bWVB
Y3Rpb24gPT0gJ0ZpbmlzaE9uUmVzdW1lJykKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAg
ICAgLy8gVGhpcyBpcyBhIHNpZ25hbCBtZWNoYW5pc20gZm9yIHRoZSB3ZWIgcHJvY2VzcyB0byB0
ZWxsIHVzIHRoYXQgdGhlIHRlc3QgaXMgZG9uZS4KKyAgICAgICAgLy8gVGhlIHdlYiBwcm9jZXNz
IGZpcmVzIHRoZSBzaWduYWwgYnkgZG9pbmcgY29uc29sZS5sb2coIkRPTkUiKS4KKyAgICAgICAg
V2ViSW5zcGVjdG9yLmxvZ01hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTG9n
TWFuYWdlci5FdmVudC5NZXNzYWdlQWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAg
ICB2YXIgbWVzc2FnZSA9IGV2ZW50LmRhdGEubWVzc2FnZTsKKyAgICAgICAgICAgIGlmICghbWVz
c2FnZS5wYXJhbWV0ZXJzIHx8IG1lc3NhZ2UucGFyYW1ldGVycy5sZW5ndGggIT09IDEpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFyYW1ldGVyc1sw
XS50eXBlICE9PSAic3RyaW5nIiB8fCBtZXNzYWdlLnBhcmFtZXRlcnNbMF0uZGVzY3JpcHRpb24g
IT09ICJET05FIikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgICAgICB9KTsKKworICAgICAgICBJbnNwZWN0b3JU
ZXN0LnJlbG9hZFBhZ2UoKTsKKyAgICB9CisKKyAgICBkb0V4Y2VwdGlvblRlc3QoJ3Rlc3RUaHJv
d2luZ1RocnVOYXRpdmVDb2RlJywgJ0FsbEV4Y2VwdGlvbnMnLCAnSWdub3JlUmVzdW1lJyk7Cit9
Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8cD5D
aGVja2luZyBwYXVzZSBsb2NhdGlvbnMgd2hlbiBwYXVzaW5nIG9uIGFsbCBleGNlcHRpb25zLjwv
cD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9icmVhay1vbi1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlv
bi10aHJvdy1pbi1wcm9taXNlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlz
ZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3IEBACitDT05TT0xFIE1F
U1NBR0U6IGxpbmUgMzY6IHRlc3RUaHJvd2luZ0luUHJvbWlzZQorQ09OU09MRSBNRVNTQUdFOiBs
aW5lIDM4OiBpbiBwcm9taXNlCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNzogdGhyb3dpbmcgVGVz
dEVycm9yCitDaGVja2luZyBwYXVzZSBsb2NhdGlvbnMgd2hlbiBwYXVzaW5nIG9uIGFsbCBleGNl
cHRpb25zLgorCitQQVVTRSAjMSBBVDogZG9UaHJvdzo4OjIyCisKSW5kZXg6IExheW91dFRlc3Rz
L2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS1y
ZXRocm93LWluLWNhdGNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLXRocm93LWluLXByb21pc2UtcmV0
aHJvdy1pbi1jYXRjaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLXRocm93LWluLXByb21pc2UtcmV0
aHJvdy1pbi1jYXRjaC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5IEBA
CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgODA6IHRlc3RUaHJvd2luZ0luUHJvbWlzZVdpdGhSZXRo
cm93SW5DYXRjaAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDgyOiBpbiBwcm9taXNlCitDT05TT0xF
IE1FU1NBR0U6IGxpbmUgNzogdGhyb3dpbmcgVGVzdEVycm9yCitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgODU6IGluIHByb21pc2UuY2F0Y2gKK0NoZWNraW5nIHBhdXNlIGxvY2F0aW9ucyB3aGVuIHBh
dXNpbmcgb24gYWxsIGV4Y2VwdGlvbnMuCisKK1BBVVNFICMxIEFUOiBkb1Rocm93Ojg6MjIKK1BB
VVNFICMyIEFUOiBwcm9taXNlQ2F0Y2g6ODY6MTYKKwpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXJldGhyb3ct
aW4tY2F0Y2guaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdn
ZXIvYnJlYWstb24tZXhjZXB0aW9uLXRocm93LWluLXByb21pc2UtcmV0aHJvdy1pbi1jYXRjaC5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFr
LW9uLWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXJldGhyb3ctaW4tY2F0Y2guaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9odHRwL3Rlc3Rz
L2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSIuL3Jlc291cmNlcy9icmVhay1vbi1leGNlcHRpb24tdGVzdHMu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgZnVuY3Rpb24g
ZG9FeGNlcHRpb25UZXN0KHRlc3ROYW1lLCBleGNlcHRpb25CcmVha1R5cGUsIHJlc3VtZUFjdGlv
bikKKyAgICB7CisgICAgICAgIHZhciBwYXVzZXMgPSAwOworICAgICAgICB2YXIgaW5kZXggPSAw
OworCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RDYXNlKHRlc3QpIHsKKyAgICAgICAgICAgIElu
c3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoInNldFRpbWVvdXQoIiArIHRlc3QgKyAiLCA1MCki
KTsKKyAgICAgICAgfQorCisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlNjcmlwdEFk
ZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFyIHNjcmlwdE9iamVjdCA9IGV2
ZW50LmRhdGEuc2NyaXB0OworICAgICAgICAgICAgaWYgKCEvYnJlYWstb24tZXhjZXB0aW9uLXRl
c3RzXC5qcyQvLnRlc3Qoc2NyaXB0T2JqZWN0LnVybCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBpZiAoZXhjZXB0aW9uQnJlYWtUeXBlID09ICdBbGxFeGNlcHRpb25z
JykKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFsbEV4Y2Vw
dGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hbGxVbmNhdWdodEV4Y2Vw
dGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7CisKKyAgICAgICAgICAgIHJ1blRlc3RD
YXNlKHRlc3ROYW1lKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIu
RXZlbnQuQ2FsbEZyYW1lc0RpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAg
IHZhciBjYWxsRnJhbWUgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFjdGl2ZUNhbGxG
cmFtZTsKKyAgICAgICAgICAgIGlmIChjYWxsRnJhbWUpIHsKKyAgICAgICAgICAgICAgICAvLyBQ
YXVzaW5nLgorICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KFdlYkluc3BlY3Rv
ci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VSZWFzb24gPT0gImV4Y2VwdGlvbiIpOworCisgICAgICAg
ICAgICAgICAgdmFyIGZ1bmNOYW1lID0gY2FsbEZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAiPGFub255
bW91cz4iOworICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGNhbGxGcmFtZS5zb3VyY2VD
b2RlTG9jYXRpb247CisgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBsb2NhdGlvbi5saW5lTnVt
YmVyICsgMTsKKyAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gbG9jYXRpb24uY29sdW1uTnVt
YmVyICsgMTsKKworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQQVVTRSAjIiAr
ICgrK3BhdXNlcykgKyAiIEFUOiAiICsgZnVuY05hbWUgKyAiOiIgKyBsaW5lICsgIjoiICsgY29s
dW1uKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnJlc3Vt
ZSgpOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFJlc3VtaW5n
LgorICAgICAgICAgICAgICAgIGlmIChyZXN1bWVBY3Rpb24gPT0gJ0ZpbmlzaE9uUmVzdW1lJykK
KyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gVGhpcyBpcyBhIHNpZ25hbCBtZWNo
YW5pc20gZm9yIHRoZSB3ZWIgcHJvY2VzcyB0byB0ZWxsIHVzIHRoYXQgdGhlIHRlc3QgaXMgZG9u
ZS4KKyAgICAgICAgLy8gVGhlIHdlYiBwcm9jZXNzIGZpcmVzIHRoZSBzaWduYWwgYnkgZG9pbmcg
Y29uc29sZS5sb2coIkRPTkUiKS4KKyAgICAgICAgV2ViSW5zcGVjdG9yLmxvZ01hbmFnZXIuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5FdmVudC5NZXNzYWdlQWRkZWQs
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IGV2ZW50LmRhdGEu
bWVzc2FnZTsKKyAgICAgICAgICAgIGlmICghbWVzc2FnZS5wYXJhbWV0ZXJzIHx8IG1lc3NhZ2Uu
cGFyYW1ldGVycy5sZW5ndGggIT09IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgaWYgKG1lc3NhZ2UucGFyYW1ldGVyc1swXS50eXBlICE9PSAic3RyaW5nIiB8fCBtZXNz
YWdlLnBhcmFtZXRlcnNbMF0uZGVzY3JpcHRpb24gIT09ICJET05FIikKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAg
ICAgICB9KTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0LnJlbG9hZFBhZ2UoKTsKKyAgICB9CisK
KyAgICBkb0V4Y2VwdGlvblRlc3QoJ3Rlc3RUaHJvd2luZ0luUHJvbWlzZVdpdGhSZXRocm93SW5D
YXRjaCcsICdBbGxFeGNlcHRpb25zJywgJ0ZpbmlzaE9uUmVzdW1lJyk7Cit9Cis8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8cD5DaGVja2luZyBwYXVz
ZSBsb2NhdGlvbnMgd2hlbiBwYXVzaW5nIG9uIGFsbCBleGNlcHRpb25zLjwvcD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1l
eGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS10aGVuLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLXRocm93
LWluLXByb21pc2UtdGhlbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLXRocm93LWluLXByb21pc2Ut
dGhlbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACitDT05TT0xF
IE1FU1NBR0U6IGxpbmUgNTU6IHRlc3RUaHJvd2luZ0luUHJvbWlzZVRoZW4KK0NPTlNPTEUgTUVT
U0FHRTogbGluZSA1NzogaW4gcHJvbWlzZQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDYwOiBpbiBw
cm9taXNlLnRoZW4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSA3OiB0aHJvd2luZyBUZXN0RXJyb3IK
K0NoZWNraW5nIHBhdXNlIGxvY2F0aW9ucyB3aGVuIHBhdXNpbmcgb24gYWxsIGV4Y2VwdGlvbnMu
CisKK1BBVVNFICMxIEFUOiBkb1Rocm93Ojg6MjIKKwpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXRoZW4td2l0
aC1jYXRjaC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXRoZW4td2l0aC1j
YXRjaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
ZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLXRocm93LWluLXByb21pc2UtdGhlbi13aXRoLWNh
dGNoLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitDT05TT0xF
IE1FU1NBR0U6IGxpbmUgNjY6IHRlc3RUaHJvd2luZ0luUHJvbWlzZVRoZW5XaXRoQ2F0Y2gKK0NP
TlNPTEUgTUVTU0FHRTogbGluZSA2ODogaW4gcHJvbWlzZQorQ09OU09MRSBNRVNTQUdFOiBsaW5l
IDcxOiBpbiBwcm9taXNlLnRoZW4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSA3OiB0aHJvd2luZyBU
ZXN0RXJyb3IKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA3NDogaW4gcHJvbWlzZS5jYXRjaAorQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDc1OiBET05FCitDaGVja2luZyBwYXVzZSBsb2NhdGlvbnMgd2hl
biBwYXVzaW5nIG9uIGFsbCBleGNlcHRpb25zLgorCitQQVVTRSAjMSBBVDogZG9UaHJvdzo4OjIy
CisKSW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRp
b24tdGhyb3ctaW4tcHJvbWlzZS10aGVuLXdpdGgtY2F0Y2guaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLXRocm93LWlu
LXByb21pc2UtdGhlbi13aXRoLWNhdGNoLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLXRocm93LWluLXByb21pc2Ut
dGhlbi13aXRoLWNhdGNoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorPCFk
b2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9yZXNvdXJjZXMv
YnJlYWstb24tZXhjZXB0aW9uLXRlc3RzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlv
biB0ZXN0KCkgeworICAgIGZ1bmN0aW9uIGRvRXhjZXB0aW9uVGVzdCh0ZXN0TmFtZSwgZXhjZXB0
aW9uQnJlYWtUeXBlLCByZXN1bWVBY3Rpb24pCisgICAgeworICAgICAgICB2YXIgcGF1c2VzID0g
MDsKKyAgICAgICAgdmFyIGluZGV4ID0gMDsKKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0Q2Fz
ZSh0ZXN0KSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJzZXRU
aW1lb3V0KCIgKyB0ZXN0ICsgIiwgNTApIik7CisgICAgICAgIH0KKworICAgICAgICBXZWJJbnNw
ZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyTWFuYWdlci5FdmVudC5TY3JpcHRBZGRlZCwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAg
ICAgIHZhciBzY3JpcHRPYmplY3QgPSBldmVudC5kYXRhLnNjcmlwdDsKKyAgICAgICAgICAgIGlm
ICghL2JyZWFrLW9uLWV4Y2VwdGlvbi10ZXN0c1wuanMkLy50ZXN0KHNjcmlwdE9iamVjdC51cmwp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkJy
ZWFrVHlwZSA9PSAnQWxsRXhjZXB0aW9ucycpCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LmRlYnVnZ2VyTWFuYWdlci5hbGxFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNhYmxlZCA9IGZhbHNl
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1hbmFnZXIuYWxsVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNhYmxlZCA9IGZhbHNl
OworCisgICAgICAgICAgICBydW5UZXN0Q2FzZSh0ZXN0TmFtZSk7CisgICAgICAgIH0pOworCisg
ICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkNhbGxGcmFtZXNEaWRDaGFuZ2UsIGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2YXIgY2FsbEZyYW1lID0gV2ViSW5zcGVjdG9yLmRl
YnVnZ2VyTWFuYWdlci5hY3RpdmVDYWxsRnJhbWU7CisgICAgICAgICAgICBpZiAoY2FsbEZyYW1l
KSB7CisgICAgICAgICAgICAgICAgLy8gUGF1c2luZy4KKyAgICAgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmFzc2VydChXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnBhdXNlUmVhc29uID09
ICJleGNlcHRpb24iKTsKKworICAgICAgICAgICAgICAgIHZhciBmdW5jTmFtZSA9IGNhbGxGcmFt
ZS5mdW5jdGlvbk5hbWUgfHwgIjxhbm9ueW1vdXM+IjsKKyAgICAgICAgICAgICAgICB2YXIgbG9j
YXRpb24gPSBjYWxsRnJhbWUuc291cmNlQ29kZUxvY2F0aW9uOworICAgICAgICAgICAgICAgIHZh
ciBsaW5lID0gbG9jYXRpb24ubGluZU51bWJlciArIDE7CisgICAgICAgICAgICAgICAgdmFyIGNv
bHVtbiA9IGxvY2F0aW9uLmNvbHVtbk51bWJlciArIDE7CisKKyAgICAgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmxvZygiUEFVU0UgIyIgKyAoKytwYXVzZXMpICsgIiBBVDogIiArIGZ1bmNOYW1l
ICsgIjoiICsgbGluZSArICI6IiArIGNvbHVtbik7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLmRlYnVnZ2VyTWFuYWdlci5yZXN1bWUoKTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAvLyBSZXN1bWluZy4KKyAgICAgICAgICAgICAgICBpZiAocmVzdW1lQWN0
aW9uID09ICdGaW5pc2hPblJlc3VtZScpCisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRl
c3QuY29tcGxldGVUZXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAg
IC8vIFRoaXMgaXMgYSBzaWduYWwgbWVjaGFuaXNtIGZvciB0aGUgd2ViIHByb2Nlc3MgdG8gdGVs
bCB1cyB0aGF0IHRoZSB0ZXN0IGlzIGRvbmUuCisgICAgICAgIC8vIFRoZSB3ZWIgcHJvY2VzcyBm
aXJlcyB0aGUgc2lnbmFsIGJ5IGRvaW5nIGNvbnNvbGUubG9nKCJET05FIikuCisgICAgICAgIFdl
Ykluc3BlY3Rvci5sb2dNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkxvZ01h
bmFnZXIuRXZlbnQuTWVzc2FnZUFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAg
dmFyIG1lc3NhZ2UgPSBldmVudC5kYXRhLm1lc3NhZ2U7CisgICAgICAgICAgICBpZiAoIW1lc3Nh
Z2UucGFyYW1ldGVycyB8fCBtZXNzYWdlLnBhcmFtZXRlcnMubGVuZ3RoICE9PSAxKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlLnBhcmFtZXRlcnNbMF0u
dHlwZSAhPT0gInN0cmluZyIgfHwgbWVzc2FnZS5wYXJhbWV0ZXJzWzBdLmRlc2NyaXB0aW9uICE9
PSAiRE9ORSIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgSW5zcGVjdG9yVGVz
dC5yZWxvYWRQYWdlKCk7CisgICAgfQorCisgICAgZG9FeGNlcHRpb25UZXN0KCd0ZXN0VGhyb3dp
bmdJblByb21pc2VUaGVuV2l0aENhdGNoJywgJ0FsbEV4Y2VwdGlvbnMnLCAnSWdub3JlUmVzdW1l
Jyk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAg
ICA8cD5DaGVja2luZyBwYXVzZSBsb2NhdGlvbnMgd2hlbiBwYXVzaW5nIG9uIGFsbCBleGNlcHRp
b25zLjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci9k
ZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS10aGVuLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2Vw
dGlvbi10aHJvdy1pbi1wcm9taXNlLXRoZW4uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlz
ZS10aGVuLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorPCFkb2N0eXBlIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i
Li4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9yZXNvdXJjZXMvYnJlYWstb24t
ZXhjZXB0aW9uLXRlc3RzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0KCkg
eworICAgIGZ1bmN0aW9uIGRvRXhjZXB0aW9uVGVzdCh0ZXN0TmFtZSwgZXhjZXB0aW9uQnJlYWtU
eXBlLCByZXN1bWVBY3Rpb24pCisgICAgeworICAgICAgICB2YXIgcGF1c2VzID0gMDsKKyAgICAg
ICAgdmFyIGluZGV4ID0gMDsKKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0Q2FzZSh0ZXN0KSB7
CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJzZXRUaW1lb3V0KCIg
KyB0ZXN0ICsgIiwgNTApIik7CisgICAgICAgIH0KKworICAgICAgICBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdl
ci5FdmVudC5TY3JpcHRBZGRlZCwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIHZhciBz
Y3JpcHRPYmplY3QgPSBldmVudC5kYXRhLnNjcmlwdDsKKyAgICAgICAgICAgIGlmICghL2JyZWFr
LW9uLWV4Y2VwdGlvbi10ZXN0c1wuanMkLy50ZXN0KHNjcmlwdE9iamVjdC51cmwpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkJyZWFrVHlwZSA9
PSAnQWxsRXhjZXB0aW9ucycpCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TWFuYWdlci5hbGxFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNhYmxlZCA9IGZhbHNlOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIu
YWxsVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNhYmxlZCA9IGZhbHNlOworCisgICAg
ICAgICAgICBydW5UZXN0Q2FzZSh0ZXN0TmFtZSk7CisgICAgICAgIH0pOworCisgICAgICAgIFdl
Ykluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNYW5hZ2VyLkV2ZW50LkNhbGxGcmFtZXNEaWRDaGFuZ2UsIGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICAgICAgICB2YXIgY2FsbEZyYW1lID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFu
YWdlci5hY3RpdmVDYWxsRnJhbWU7CisgICAgICAgICAgICBpZiAoY2FsbEZyYW1lKSB7CisgICAg
ICAgICAgICAgICAgLy8gUGF1c2luZy4KKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFz
c2VydChXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnBhdXNlUmVhc29uID09ICJleGNlcHRp
b24iKTsKKworICAgICAgICAgICAgICAgIHZhciBmdW5jTmFtZSA9IGNhbGxGcmFtZS5mdW5jdGlv
bk5hbWUgfHwgIjxhbm9ueW1vdXM+IjsKKyAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24gPSBj
YWxsRnJhbWUuc291cmNlQ29kZUxvY2F0aW9uOworICAgICAgICAgICAgICAgIHZhciBsaW5lID0g
bG9jYXRpb24ubGluZU51bWJlciArIDE7CisgICAgICAgICAgICAgICAgdmFyIGNvbHVtbiA9IGxv
Y2F0aW9uLmNvbHVtbk51bWJlciArIDE7CisKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmxvZygiUEFVU0UgIyIgKyAoKytwYXVzZXMpICsgIiBBVDogIiArIGZ1bmNOYW1lICsgIjoiICsg
bGluZSArICI6IiArIGNvbHVtbik7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTWFuYWdlci5yZXN1bWUoKTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBSZXN1bWluZy4KKyAgICAgICAgICAgICAgICBpZiAocmVzdW1lQWN0aW9uID09ICdG
aW5pc2hPblJlc3VtZScpCisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxl
dGVUZXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIC8vIFRoaXMg
aXMgYSBzaWduYWwgbWVjaGFuaXNtIGZvciB0aGUgd2ViIHByb2Nlc3MgdG8gdGVsbCB1cyB0aGF0
IHRoZSB0ZXN0IGlzIGRvbmUuCisgICAgICAgIC8vIFRoZSB3ZWIgcHJvY2VzcyBmaXJlcyB0aGUg
c2lnbmFsIGJ5IGRvaW5nIGNvbnNvbGUubG9nKCJET05FIikuCisgICAgICAgIFdlYkluc3BlY3Rv
ci5sb2dNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIuRXZl
bnQuTWVzc2FnZUFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFyIG1lc3Nh
Z2UgPSBldmVudC5kYXRhLm1lc3NhZ2U7CisgICAgICAgICAgICBpZiAoIW1lc3NhZ2UucGFyYW1l
dGVycyB8fCBtZXNzYWdlLnBhcmFtZXRlcnMubGVuZ3RoICE9PSAxKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlLnBhcmFtZXRlcnNbMF0udHlwZSAhPT0g
InN0cmluZyIgfHwgbWVzc2FnZS5wYXJhbWV0ZXJzWzBdLmRlc2NyaXB0aW9uICE9PSAiRE9ORSIp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21w
bGV0ZVRlc3QoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5yZWxvYWRQ
YWdlKCk7CisgICAgfQorCisgICAgZG9FeGNlcHRpb25UZXN0KCd0ZXN0VGhyb3dpbmdJblByb21p
c2VUaGVuJywgJ0FsbEV4Y2VwdGlvbnMnLCAnRmluaXNoT25SZXN1bWUnKTsKK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDxwPkNoZWNraW5nIHBh
dXNlIGxvY2F0aW9ucyB3aGVuIHBhdXNpbmcgb24gYWxsIGV4Y2VwdGlvbnMuPC9wPgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9u
LWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXdpdGgtY2F0Y2gtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRp
b24tdGhyb3ctaW4tcHJvbWlzZS13aXRoLWNhdGNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24tdGhy
b3ctaW4tcHJvbWlzZS13aXRoLWNhdGNoLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDkgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA0NDogdGVzdFRocm93aW5nSW5Qcm9t
aXNlV2l0aENhdGNoCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNDY6IGluIHByb21pc2UKK0NPTlNP
TEUgTUVTU0FHRTogbGluZSA3OiB0aHJvd2luZyBUZXN0RXJyb3IKK0NPTlNPTEUgTUVTU0FHRTog
bGluZSA0OTogaW4gcHJvbWlzZS5jYXRjaAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDUwOiBET05F
CitDaGVja2luZyBwYXVzZSBsb2NhdGlvbnMgd2hlbiBwYXVzaW5nIG9uIGFsbCBleGNlcHRpb25z
LgorCitQQVVTRSAjMSBBVDogZG9UaHJvdzo4OjIyCisKSW5kZXg6IExheW91dFRlc3RzL2luc3Bl
Y3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS13aXRoLWNh
dGNoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2Jy
ZWFrLW9uLWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXdpdGgtY2F0Y2guaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRp
b24tdGhyb3ctaW4tcHJvbWlzZS13aXRoLWNhdGNoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MiBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVj
dG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iLi9yZXNvdXJjZXMvYnJlYWstb24tZXhjZXB0aW9uLXRlc3RzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+CitmdW5jdGlvbiB0ZXN0KCkgeworICAgIGZ1bmN0aW9uIGRvRXhjZXB0aW9uVGVzdCh0
ZXN0TmFtZSwgZXhjZXB0aW9uQnJlYWtUeXBlLCByZXN1bWVBY3Rpb24pCisgICAgeworICAgICAg
ICB2YXIgcGF1c2VzID0gMDsKKyAgICAgICAgdmFyIGluZGV4ID0gMDsKKworICAgICAgICBmdW5j
dGlvbiBydW5UZXN0Q2FzZSh0ZXN0KSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1
YXRlSW5QYWdlKCJzZXRUaW1lb3V0KCIgKyB0ZXN0ICsgIiwgNTApIik7CisgICAgICAgIH0KKwor
ICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5TY3JpcHRBZGRlZCwgZnVuY3Rpb24oZXZl
bnQpIHsKKyAgICAgICAgICAgIHZhciBzY3JpcHRPYmplY3QgPSBldmVudC5kYXRhLnNjcmlwdDsK
KyAgICAgICAgICAgIGlmICghL2JyZWFrLW9uLWV4Y2VwdGlvbi10ZXN0c1wuanMkLy50ZXN0KHNj
cmlwdE9iamVjdC51cmwpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
aWYgKGV4Y2VwdGlvbkJyZWFrVHlwZSA9PSAnQWxsRXhjZXB0aW9ucycpCisgICAgICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hbGxFeGNlcHRpb25zQnJlYWtwb2ludC5k
aXNhYmxlZCA9IGZhbHNlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWxsVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludC5k
aXNhYmxlZCA9IGZhbHNlOworCisgICAgICAgICAgICBydW5UZXN0Q2FzZSh0ZXN0TmFtZSk7Cisg
ICAgICAgIH0pOworCisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkNhbGxGcmFtZXNE
aWRDaGFuZ2UsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2YXIgY2FsbEZyYW1lID0g
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hY3RpdmVDYWxsRnJhbWU7CisgICAgICAgICAg
ICBpZiAoY2FsbEZyYW1lKSB7CisgICAgICAgICAgICAgICAgLy8gUGF1c2luZy4KKyAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2Vy
LnBhdXNlUmVhc29uID09ICJleGNlcHRpb24iKTsKKworICAgICAgICAgICAgICAgIHZhciBmdW5j
TmFtZSA9IGNhbGxGcmFtZS5mdW5jdGlvbk5hbWUgfHwgIjxhbm9ueW1vdXM+IjsKKyAgICAgICAg
ICAgICAgICB2YXIgbG9jYXRpb24gPSBjYWxsRnJhbWUuc291cmNlQ29kZUxvY2F0aW9uOworICAg
ICAgICAgICAgICAgIHZhciBsaW5lID0gbG9jYXRpb24ubGluZU51bWJlciArIDE7CisgICAgICAg
ICAgICAgICAgdmFyIGNvbHVtbiA9IGxvY2F0aW9uLmNvbHVtbk51bWJlciArIDE7CisKKyAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUEFVU0UgIyIgKyAoKytwYXVzZXMpICsgIiBB
VDogIiArIGZ1bmNOYW1lICsgIjoiICsgbGluZSArICI6IiArIGNvbHVtbik7CisgICAgICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5yZXN1bWUoKTsKKworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBSZXN1bWluZy4KKyAgICAgICAgICAgICAg
ICBpZiAocmVzdW1lQWN0aW9uID09ICdGaW5pc2hPblJlc3VtZScpCisgICAgICAgICAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0pOworCisgICAgICAgIC8vIFRoaXMgaXMgYSBzaWduYWwgbWVjaGFuaXNtIGZvciB0aGUgd2Vi
IHByb2Nlc3MgdG8gdGVsbCB1cyB0aGF0IHRoZSB0ZXN0IGlzIGRvbmUuCisgICAgICAgIC8vIFRo
ZSB3ZWIgcHJvY2VzcyBmaXJlcyB0aGUgc2lnbmFsIGJ5IGRvaW5nIGNvbnNvbGUubG9nKCJET05F
IikuCisgICAgICAgIFdlYkluc3BlY3Rvci5sb2dNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLkxvZ01hbmFnZXIuRXZlbnQuTWVzc2FnZUFkZGVkLCBmdW5jdGlvbihldmVudCkg
eworICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBldmVudC5kYXRhLm1lc3NhZ2U7CisgICAgICAg
ICAgICBpZiAoIW1lc3NhZ2UucGFyYW1ldGVycyB8fCBtZXNzYWdlLnBhcmFtZXRlcnMubGVuZ3Ro
ICE9PSAxKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChtZXNzYWdl
LnBhcmFtZXRlcnNbMF0udHlwZSAhPT0gInN0cmluZyIgfHwgbWVzc2FnZS5wYXJhbWV0ZXJzWzBd
LmRlc2NyaXB0aW9uICE9PSAiRE9ORSIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgSW5zcGVjdG9yVGVzdC5yZWxvYWRQYWdlKCk7CisgICAgfQorCisgICAgZG9FeGNlcHRpb25U
ZXN0KCd0ZXN0VGhyb3dpbmdJblByb21pc2VXaXRoQ2F0Y2gnLCAnQWxsRXhjZXB0aW9ucycsICdJ
Z25vcmVSZXN1bWUnKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5U
ZXN0KCkiPgorICAgIDxwPkNoZWNraW5nIHBhdXNlIGxvY2F0aW9ucyB3aGVuIHBhdXNpbmcgb24g
YWxsIGV4Y2VwdGlvbnMuPC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9u
LWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLXRocm93LWluLXByb21p
c2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACis8IWRvY3R5cGUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8u
Li9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL3Jlc291cmNlcy9icmVhay1vbi1leGNl
cHRpb24tdGVzdHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRlc3QoKSB7Cisg
ICAgZnVuY3Rpb24gZG9FeGNlcHRpb25UZXN0KHRlc3ROYW1lLCBleGNlcHRpb25CcmVha1R5cGUs
IHJlc3VtZUFjdGlvbikKKyAgICB7CisgICAgICAgIHZhciBwYXVzZXMgPSAwOworICAgICAgICB2
YXIgaW5kZXggPSAwOworCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RDYXNlKHRlc3QpIHsKKyAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoInNldFRpbWVvdXQoIiArIHRl
c3QgKyAiLCA1MCkiKTsKKyAgICAgICAgfQorCisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2
ZW50LlNjcmlwdEFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFyIHNjcmlw
dE9iamVjdCA9IGV2ZW50LmRhdGEuc2NyaXB0OworICAgICAgICAgICAgaWYgKCEvYnJlYWstb24t
ZXhjZXB0aW9uLXRlc3RzXC5qcyQvLnRlc3Qoc2NyaXB0T2JqZWN0LnVybCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoZXhjZXB0aW9uQnJlYWtUeXBlID09ICdB
bGxFeGNlcHRpb25zJykKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5h
Z2VyLmFsbEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hbGxV
bmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7CisKKyAgICAgICAg
ICAgIHJ1blRlc3RDYXNlKHRlc3ROYW1lKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgV2ViSW5z
cGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1hbmFnZXIuRXZlbnQuQ2FsbEZyYW1lc0RpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsK
KyAgICAgICAgICAgIHZhciBjYWxsRnJhbWUgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2Vy
LmFjdGl2ZUNhbGxGcmFtZTsKKyAgICAgICAgICAgIGlmIChjYWxsRnJhbWUpIHsKKyAgICAgICAg
ICAgICAgICAvLyBQYXVzaW5nLgorICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0
KFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VSZWFzb24gPT0gImV4Y2VwdGlvbiIp
OworCisgICAgICAgICAgICAgICAgdmFyIGZ1bmNOYW1lID0gY2FsbEZyYW1lLmZ1bmN0aW9uTmFt
ZSB8fCAiPGFub255bW91cz4iOworICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGNhbGxG
cmFtZS5zb3VyY2VDb2RlTG9jYXRpb247CisgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBsb2Nh
dGlvbi5saW5lTnVtYmVyICsgMTsKKyAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gbG9jYXRp
b24uY29sdW1uTnVtYmVyICsgMTsKKworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9n
KCJQQVVTRSAjIiArICgrK3BhdXNlcykgKyAiIEFUOiAiICsgZnVuY05hbWUgKyAiOiIgKyBsaW5l
ICsgIjoiICsgY29sdW1uKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
YW5hZ2VyLnJlc3VtZSgpOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IC8vIFJlc3VtaW5nLgorICAgICAgICAgICAgICAgIGlmIChyZXN1bWVBY3Rpb24gPT0gJ0Zpbmlz
aE9uUmVzdW1lJykKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRl
c3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gVGhpcyBpcyBh
IHNpZ25hbCBtZWNoYW5pc20gZm9yIHRoZSB3ZWIgcHJvY2VzcyB0byB0ZWxsIHVzIHRoYXQgdGhl
IHRlc3QgaXMgZG9uZS4KKyAgICAgICAgLy8gVGhlIHdlYiBwcm9jZXNzIGZpcmVzIHRoZSBzaWdu
YWwgYnkgZG9pbmcgY29uc29sZS5sb2coIkRPTkUiKS4KKyAgICAgICAgV2ViSW5zcGVjdG9yLmxv
Z01hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5FdmVudC5N
ZXNzYWdlQWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2YXIgbWVzc2FnZSA9
IGV2ZW50LmRhdGEubWVzc2FnZTsKKyAgICAgICAgICAgIGlmICghbWVzc2FnZS5wYXJhbWV0ZXJz
IHx8IG1lc3NhZ2UucGFyYW1ldGVycy5sZW5ndGggIT09IDEpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFyYW1ldGVyc1swXS50eXBlICE9PSAic3Ry
aW5nIiB8fCBtZXNzYWdlLnBhcmFtZXRlcnNbMF0uZGVzY3JpcHRpb24gIT09ICJET05FIikKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRl
VGVzdCgpOworICAgICAgICB9KTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0LnJlbG9hZFBhZ2Uo
KTsKKyAgICB9CisKKyAgICBkb0V4Y2VwdGlvblRlc3QoJ3Rlc3RUaHJvd2luZ0luUHJvbWlzZScs
ICdBbGxFeGNlcHRpb25zJywgJ0ZpbmlzaE9uUmVzdW1lJyk7Cit9Cis8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8cD5DaGVja2luZyBwYXVzZSBsb2Nh
dGlvbnMgd2hlbiBwYXVzaW5nIG9uIGFsbCBleGNlcHRpb25zLjwvcD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRp
b24td2luZG93LW9uZXJyb3ItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24td2luZG93LW9uZXJyb3ItZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2Vy
L2JyZWFrLW9uLWV4Y2VwdGlvbi13aW5kb3ctb25lcnJvci1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4IEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNzogdGhyb3dpbmcg
VGVzdEVycm9yCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgODogd2luZG93Lm9uZXJyb3I6IFRlc3RF
cnJvcgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDk6IERPTkUKK0NPTlNPTEUgTUVTU0FHRTogbGlu
ZSA4OiBUZXN0RXJyb3IKK0NoZWNraW5nIHBhdXNlIGxvY2F0aW9ucyB3aGVuIHBhdXNpbmcgb24g
YWxsIGV4Y2VwdGlvbnMuCisKK1BBVVNFICMxIEFUOiBkb1Rocm93Ojg6MjIKKwpJbmRleDogTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi13aW5kb3ctb25l
cnJvci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9i
cmVhay1vbi1leGNlcHRpb24td2luZG93LW9uZXJyb3IuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24td2luZG93LW9u
ZXJyb3IuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACis8IWRvY3R5cGUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIu
Li8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL3Jlc291cmNlcy9icmVhay1vbi1l
eGNlcHRpb24tdGVzdHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3dpbmRvdy5vbmVycm9yID0g
ZnVuY3Rpb24oZSkgeworICAgIGNvbnNvbGUubG9nKCJ3aW5kb3cub25lcnJvcjogIiArIGUpOwor
ICAgIGNvbnNvbGUubG9nKCJET05FIik7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgZnVu
Y3Rpb24gZG9FeGNlcHRpb25UZXN0KHRlc3ROYW1lLCBleGNlcHRpb25CcmVha1R5cGUsIHJlc3Vt
ZUFjdGlvbikKKyAgICB7CisgICAgICAgIHZhciBwYXVzZXMgPSAwOworICAgICAgICB2YXIgaW5k
ZXggPSAwOworCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RDYXNlKHRlc3QpIHsKKyAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoInNldFRpbWVvdXQoIiArIHRlc3QgKyAi
LCA1MCkiKTsKKyAgICAgICAgfQorCisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFn
ZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlNj
cmlwdEFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFyIHNjcmlwdE9iamVj
dCA9IGV2ZW50LmRhdGEuc2NyaXB0OworICAgICAgICAgICAgaWYgKCEvYnJlYWstb24tZXhjZXB0
aW9uLXRlc3RzXC5qcyQvLnRlc3Qoc2NyaXB0T2JqZWN0LnVybCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICBpZiAoZXhjZXB0aW9uQnJlYWtUeXBlID09ICdBbGxFeGNl
cHRpb25zJykKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFs
bEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hbGxVbmNhdWdo
dEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7CisKKyAgICAgICAgICAgIHJ1
blRlc3RDYXNlKHRlc3ROYW1lKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgV2ViSW5zcGVjdG9y
LmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1h
bmFnZXIuRXZlbnQuQ2FsbEZyYW1lc0RpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAg
ICAgICAgIHZhciBjYWxsRnJhbWUgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFjdGl2
ZUNhbGxGcmFtZTsKKyAgICAgICAgICAgIGlmIChjYWxsRnJhbWUpIHsKKyAgICAgICAgICAgICAg
ICAvLyBQYXVzaW5nLgorICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VSZWFzb24gPT0gImV4Y2VwdGlvbiIpOworCisg
ICAgICAgICAgICAgICAgdmFyIGZ1bmNOYW1lID0gY2FsbEZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAi
PGFub255bW91cz4iOworICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGNhbGxGcmFtZS5z
b3VyY2VDb2RlTG9jYXRpb247CisgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBsb2NhdGlvbi5s
aW5lTnVtYmVyICsgMTsKKyAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gbG9jYXRpb24uY29s
dW1uTnVtYmVyICsgMTsKKworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQQVVT
RSAjIiArICgrK3BhdXNlcykgKyAiIEFUOiAiICsgZnVuY05hbWUgKyAiOiIgKyBsaW5lICsgIjoi
ICsgY29sdW1uKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2Vy
LnJlc3VtZSgpOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFJl
c3VtaW5nLgorICAgICAgICAgICAgICAgIGlmIChyZXN1bWVBY3Rpb24gPT0gJ0ZpbmlzaE9uUmVz
dW1lJykKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gVGhpcyBpcyBhIHNpZ25h
bCBtZWNoYW5pc20gZm9yIHRoZSB3ZWIgcHJvY2VzcyB0byB0ZWxsIHVzIHRoYXQgdGhlIHRlc3Qg
aXMgZG9uZS4KKyAgICAgICAgLy8gVGhlIHdlYiBwcm9jZXNzIGZpcmVzIHRoZSBzaWduYWwgYnkg
ZG9pbmcgY29uc29sZS5sb2coIkRPTkUiKS4KKyAgICAgICAgV2ViSW5zcGVjdG9yLmxvZ01hbmFn
ZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5FdmVudC5NZXNzYWdl
QWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IGV2ZW50
LmRhdGEubWVzc2FnZTsKKyAgICAgICAgICAgIGlmICghbWVzc2FnZS5wYXJhbWV0ZXJzIHx8IG1l
c3NhZ2UucGFyYW1ldGVycy5sZW5ndGggIT09IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFyYW1ldGVyc1swXS50eXBlICE9PSAic3RyaW5nIiB8
fCBtZXNzYWdlLnBhcmFtZXRlcnNbMF0uZGVzY3JpcHRpb24gIT09ICJET05FIikKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgp
OworICAgICAgICB9KTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0LnJlbG9hZFBhZ2UoKTsKKyAg
ICB9CisKKyAgICBkb0V4Y2VwdGlvblRlc3QoJ2RvVGhyb3cnLCAnQWxsRXhjZXB0aW9ucycsICdJ
Z25vcmVSZXN1bWUnKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5U
ZXN0KCkiPgorICAgIDxwPkNoZWNraW5nIHBhdXNlIGxvY2F0aW9ucyB3aGVuIHBhdXNpbmcgb24g
YWxsIGV4Y2VwdGlvbnMuPC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLWV4Y2VwdGlvbi5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1leGNlcHRpb24uaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi1l
eGNlcHRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACis8IWRvY3R5cGUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3Jj
PSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL3Jlc291cmNlcy9icmVhay1v
bi1leGNlcHRpb24tdGVzdHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRlc3Qo
KSB7CisgICAgZnVuY3Rpb24gZG9FeGNlcHRpb25UZXN0KHRlc3ROYW1lLCBleGNlcHRpb25CcmVh
a1R5cGUsIHJlc3VtZUFjdGlvbikKKyAgICB7CisgICAgICAgIHZhciBwYXVzZXMgPSAwOworICAg
ICAgICB2YXIgaW5kZXggPSAwOworCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RDYXNlKHRlc3Qp
IHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoInNldFRpbWVvdXQo
IiArIHRlc3QgKyAiLCA1MCkiKTsKKyAgICAgICAgfQorCisgICAgICAgIFdlYkluc3BlY3Rvci5k
ZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5h
Z2VyLkV2ZW50LlNjcmlwdEFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFy
IHNjcmlwdE9iamVjdCA9IGV2ZW50LmRhdGEuc2NyaXB0OworICAgICAgICAgICAgaWYgKCEvYnJl
YWstb24tZXhjZXB0aW9uLXRlc3RzXC5qcyQvLnRlc3Qoc2NyaXB0T2JqZWN0LnVybCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoZXhjZXB0aW9uQnJlYWtUeXBl
ID09ICdBbGxFeGNlcHRpb25zJykKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdn
ZXJNYW5hZ2VyLmFsbEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdl
ci5hbGxVbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7CisKKyAg
ICAgICAgICAgIHJ1blRlc3RDYXNlKHRlc3ROYW1lKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQ2FsbEZyYW1lc0RpZENoYW5nZSwgZnVuY3Rpb24oZXZl
bnQpIHsKKyAgICAgICAgICAgIHZhciBjYWxsRnJhbWUgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
YW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZTsKKyAgICAgICAgICAgIGlmIChjYWxsRnJhbWUpIHsKKyAg
ICAgICAgICAgICAgICAvLyBQYXVzaW5nLgorICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
YXNzZXJ0KFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VSZWFzb24gPT0gImV4Y2Vw
dGlvbiIpOworCisgICAgICAgICAgICAgICAgdmFyIGZ1bmNOYW1lID0gY2FsbEZyYW1lLmZ1bmN0
aW9uTmFtZSB8fCAiPGFub255bW91cz4iOworICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9
IGNhbGxGcmFtZS5zb3VyY2VDb2RlTG9jYXRpb247CisgICAgICAgICAgICAgICAgdmFyIGxpbmUg
PSBsb2NhdGlvbi5saW5lTnVtYmVyICsgMTsKKyAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0g
bG9jYXRpb24uY29sdW1uTnVtYmVyICsgMTsKKworICAgICAgICAgICAgICAgIEluc3BlY3RvclRl
c3QubG9nKCJQQVVTRSAjIiArICgrK3BhdXNlcykgKyAiIEFUOiAiICsgZnVuY05hbWUgKyAiOiIg
KyBsaW5lICsgIjoiICsgY29sdW1uKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNYW5hZ2VyLnJlc3VtZSgpOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIFJlc3VtaW5nLgorICAgICAgICAgICAgICAgIGlmIChyZXN1bWVBY3Rpb24gPT0g
J0ZpbmlzaE9uUmVzdW1lJykKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21w
bGV0ZVRlc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gVGhp
cyBpcyBhIHNpZ25hbCBtZWNoYW5pc20gZm9yIHRoZSB3ZWIgcHJvY2VzcyB0byB0ZWxsIHVzIHRo
YXQgdGhlIHRlc3QgaXMgZG9uZS4KKyAgICAgICAgLy8gVGhlIHdlYiBwcm9jZXNzIGZpcmVzIHRo
ZSBzaWduYWwgYnkgZG9pbmcgY29uc29sZS5sb2coIkRPTkUiKS4KKyAgICAgICAgV2ViSW5zcGVj
dG9yLmxvZ01hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5F
dmVudC5NZXNzYWdlQWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2YXIgbWVz
c2FnZSA9IGV2ZW50LmRhdGEubWVzc2FnZTsKKyAgICAgICAgICAgIGlmICghbWVzc2FnZS5wYXJh
bWV0ZXJzIHx8IG1lc3NhZ2UucGFyYW1ldGVycy5sZW5ndGggIT09IDEpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFyYW1ldGVyc1swXS50eXBlICE9
PSAic3RyaW5nIiB8fCBtZXNzYWdlLnBhcmFtZXRlcnNbMF0uZGVzY3JpcHRpb24gIT09ICJET05F
IikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNv
bXBsZXRlVGVzdCgpOworICAgICAgICB9KTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0LnJlbG9h
ZFBhZ2UoKTsKKyAgICB9CisKKyAgICBkb0V4Y2VwdGlvblRlc3QoJ2RvVGhyb3cnLCAnQWxsRXhj
ZXB0aW9ucycsICdJZ25vcmVSZXN1bWUnKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkg
b25sb2FkPSJydW5UZXN0KCkiPgorICAgIDxwPkNoZWNraW5nIHBhdXNlIGxvY2F0aW9ucyB3aGVu
IHBhdXNpbmcgb24gYWxsIGV4Y2VwdGlvbnMuPC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0LWV4Y2VwdGlv
bi1jYXRjaC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0LWV4Y2VwdGlvbi1jYXRjaC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24t
dW5jYXVnaHQtZXhjZXB0aW9uLWNhdGNoLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxMjogdGVzdENhdGNoCitDT05TT0xF
IE1FU1NBR0U6IGxpbmUgNzogdGhyb3dpbmcgVGVzdEVycm9yCitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgMTY6IGNhdGNoIFRlc3RFcnJvcgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE4OiBET05FCitD
aGVja2luZyBwYXVzZSBsb2NhdGlvbnMgd2hlbiBwYXVzaW5nIG9uIHVuY2F1Z2h0IGV4Y2VwdGlv
bnMuCkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVn
aHQtZXhjZXB0aW9uLWNhdGNoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0LWV4Y2VwdGlvbi1jYXRjaC5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1
Z2h0LWV4Y2VwdGlvbi1jYXRjaC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAK
KzwhZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vcmVzb3Vy
Y2VzL2JyZWFrLW9uLWV4Y2VwdGlvbi10ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZnVu
Y3Rpb24gdGVzdCgpIHsKKyAgICBmdW5jdGlvbiBkb0V4Y2VwdGlvblRlc3QodGVzdE5hbWUsIGV4
Y2VwdGlvbkJyZWFrVHlwZSwgcmVzdW1lQWN0aW9uKQorICAgIHsKKyAgICAgICAgdmFyIHBhdXNl
cyA9IDA7CisgICAgICAgIHZhciBpbmRleCA9IDA7CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVz
dENhc2UodGVzdCkgeworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluUGFnZSgi
c2V0VGltZW91dCgiICsgdGVzdCArICIsIDUwKSIpOworICAgICAgICB9CisKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlck1hbmFnZXIuRXZlbnQuU2NyaXB0QWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
ICAgICAgICB2YXIgc2NyaXB0T2JqZWN0ID0gZXZlbnQuZGF0YS5zY3JpcHQ7CisgICAgICAgICAg
ICBpZiAoIS9icmVhay1vbi1leGNlcHRpb24tdGVzdHNcLmpzJC8udGVzdChzY3JpcHRPYmplY3Qu
dXJsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChleGNlcHRp
b25CcmVha1R5cGUgPT0gJ0FsbEV4Y2VwdGlvbnMnKQorICAgICAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQuZGlzYWJsZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNYW5hZ2VyLmFsbFVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQuZGlzYWJsZWQgPSBm
YWxzZTsKKworICAgICAgICAgICAgcnVuVGVzdENhc2UodGVzdE5hbWUpOworICAgICAgICB9KTsK
KworICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5DYWxsRnJhbWVzRGlkQ2hhbmdlLCBm
dW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFyIGNhbGxGcmFtZSA9IFdlYkluc3BlY3Rv
ci5kZWJ1Z2dlck1hbmFnZXIuYWN0aXZlQ2FsbEZyYW1lOworICAgICAgICAgICAgaWYgKGNhbGxG
cmFtZSkgeworICAgICAgICAgICAgICAgIC8vIFBhdXNpbmcuCisgICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5hc3NlcnQoV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5wYXVzZVJlYXNv
biA9PSAiZXhjZXB0aW9uIik7CisKKyAgICAgICAgICAgICAgICB2YXIgZnVuY05hbWUgPSBjYWxs
RnJhbWUuZnVuY3Rpb25OYW1lIHx8ICI8YW5vbnltb3VzPiI7CisgICAgICAgICAgICAgICAgdmFy
IGxvY2F0aW9uID0gY2FsbEZyYW1lLnNvdXJjZUNvZGVMb2NhdGlvbjsKKyAgICAgICAgICAgICAg
ICB2YXIgbGluZSA9IGxvY2F0aW9uLmxpbmVOdW1iZXIgKyAxOworICAgICAgICAgICAgICAgIHZh
ciBjb2x1bW4gPSBsb2NhdGlvbi5jb2x1bW5OdW1iZXIgKyAxOworCisgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5sb2coIlBBVVNFICMiICsgKCsrcGF1c2VzKSArICIgQVQ6ICIgKyBmdW5j
TmFtZSArICI6IiArIGxpbmUgKyAiOiIgKyBjb2x1bW4pOworICAgICAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucmVzdW1lKCk7CisKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgLy8gUmVzdW1pbmcuCisgICAgICAgICAgICAgICAgaWYgKHJlc3Vt
ZUFjdGlvbiA9PSAnRmluaXNoT25SZXN1bWUnKQorICAgICAgICAgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAg
ICAgICAvLyBUaGlzIGlzIGEgc2lnbmFsIG1lY2hhbmlzbSBmb3IgdGhlIHdlYiBwcm9jZXNzIHRv
IHRlbGwgdXMgdGhhdCB0aGUgdGVzdCBpcyBkb25lLgorICAgICAgICAvLyBUaGUgd2ViIHByb2Nl
c3MgZmlyZXMgdGhlIHNpZ25hbCBieSBkb2luZyBjb25zb2xlLmxvZygiRE9ORSIpLgorICAgICAg
ICBXZWJJbnNwZWN0b3IubG9nTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5M
b2dNYW5hZ2VyLkV2ZW50Lk1lc3NhZ2VBZGRlZCwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAg
ICAgIHZhciBtZXNzYWdlID0gZXZlbnQuZGF0YS5tZXNzYWdlOworICAgICAgICAgICAgaWYgKCFt
ZXNzYWdlLnBhcmFtZXRlcnMgfHwgbWVzc2FnZS5wYXJhbWV0ZXJzLmxlbmd0aCAhPT0gMSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAobWVzc2FnZS5wYXJhbWV0ZXJz
WzBdLnR5cGUgIT09ICJzdHJpbmciIHx8IG1lc3NhZ2UucGFyYW1ldGVyc1swXS5kZXNjcmlwdGlv
biAhPT0gIkRPTkUiKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuY29tcGxldGVUZXN0KCk7CisgICAgICAgIH0pOworCisgICAgICAgIEluc3BlY3Rv
clRlc3QucmVsb2FkUGFnZSgpOworICAgIH0KKworICAgIGRvRXhjZXB0aW9uVGVzdCgndGVzdENh
dGNoJywgJ1VuY2F1Z2h0RXhjZXB0aW9ucycsICdJZ25vcmVSZXN1bWUnKTsKK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDxwPkNoZWNraW5nIHBh
dXNlIGxvY2F0aW9ucyB3aGVuIHBhdXNpbmcgb24gdW5jYXVnaHQgZXhjZXB0aW9ucy48L3A+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJl
YWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9icmVhay1vbi11bmNhdWdodC1leGNlcHRpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDc6IHRocm93aW5nIFRlc3RF
cnJvcgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDg6IFRlc3RFcnJvcgorQ2hlY2tpbmcgcGF1c2Ug
bG9jYXRpb25zIHdoZW4gcGF1c2luZyBvbiB1bmNhdWdodCBleGNlcHRpb25zLgorCitQQVVTRSAj
MSBBVDogZG9UaHJvdzo4OjIyCitVbmNhdWdodCBleGNlcHRpb24gaW4gdGVzdCBwYWdlOiBUZXN0
RXJyb3IgW2JyZWFrLW9uLWV4Y2VwdGlvbi10ZXN0cy5qczo4XQorCkluZGV4OiBMYXlvdXRUZXN0
cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLWZpbmFsbHkt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9icmVhay1vbi11bmNhdWdodC1leGNlcHRpb24tZmluYWxseS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVn
aHQtZXhjZXB0aW9uLWZpbmFsbHktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOSBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDIyOiB0ZXN0RmluYWxseQorQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDc6IHRocm93aW5nIFRlc3RFcnJvcgorQ09OU09MRSBNRVNTQUdFOiBsaW5l
IDI2OiBmaW5hbGx5CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgODogVGVzdEVycm9yCitDaGVja2lu
ZyBwYXVzZSBsb2NhdGlvbnMgd2hlbiBwYXVzaW5nIG9uIHVuY2F1Z2h0IGV4Y2VwdGlvbnMuCisK
K1BBVVNFICMxIEFUOiBkb1Rocm93Ojg6MjIKK1VuY2F1Z2h0IGV4Y2VwdGlvbiBpbiB0ZXN0IHBh
Z2U6IFRlc3RFcnJvciBbYnJlYWstb24tZXhjZXB0aW9uLXRlc3RzLmpzOjhdCisKSW5kZXg6IExh
eW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi11bmNhdWdodC1leGNlcHRpb24t
ZmluYWxseS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9icmVhay1vbi11bmNhdWdodC1leGNlcHRpb24tZmluYWxseS5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0LWV4Y2Vw
dGlvbi1maW5hbGx5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorPCFkb2N0
eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9yZXNvdXJjZXMvYnJl
YWstb24tZXhjZXB0aW9uLXRlc3RzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0
ZXN0KCkgeworICAgIGZ1bmN0aW9uIGRvRXhjZXB0aW9uVGVzdCh0ZXN0TmFtZSwgZXhjZXB0aW9u
QnJlYWtUeXBlLCByZXN1bWVBY3Rpb24pCisgICAgeworICAgICAgICB2YXIgcGF1c2VzID0gMDsK
KyAgICAgICAgdmFyIGluZGV4ID0gMDsKKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0Q2FzZSh0
ZXN0KSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJzZXRUaW1l
b3V0KCIgKyB0ZXN0ICsgIiwgNTApIik7CisgICAgICAgIH0KKworICAgICAgICBXZWJJbnNwZWN0
b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2Vy
TWFuYWdlci5FdmVudC5TY3JpcHRBZGRlZCwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAg
IHZhciBzY3JpcHRPYmplY3QgPSBldmVudC5kYXRhLnNjcmlwdDsKKyAgICAgICAgICAgIGlmICgh
L2JyZWFrLW9uLWV4Y2VwdGlvbi10ZXN0c1wuanMkLy50ZXN0KHNjcmlwdE9iamVjdC51cmwpKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkJyZWFr
VHlwZSA9PSAnQWxsRXhjZXB0aW9ucycpCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRl
YnVnZ2VyTWFuYWdlci5hbGxFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNhYmxlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1h
bmFnZXIuYWxsVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNhYmxlZCA9IGZhbHNlOwor
CisgICAgICAgICAgICBydW5UZXN0Q2FzZSh0ZXN0TmFtZSk7CisgICAgICAgIH0pOworCisgICAg
ICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkNhbGxGcmFtZXNEaWRDaGFuZ2UsIGZ1bmN0aW9u
KGV2ZW50KSB7CisgICAgICAgICAgICB2YXIgY2FsbEZyYW1lID0gV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTWFuYWdlci5hY3RpdmVDYWxsRnJhbWU7CisgICAgICAgICAgICBpZiAoY2FsbEZyYW1lKSB7
CisgICAgICAgICAgICAgICAgLy8gUGF1c2luZy4KKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LmFzc2VydChXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnBhdXNlUmVhc29uID09ICJl
eGNlcHRpb24iKTsKKworICAgICAgICAgICAgICAgIHZhciBmdW5jTmFtZSA9IGNhbGxGcmFtZS5m
dW5jdGlvbk5hbWUgfHwgIjxhbm9ueW1vdXM+IjsKKyAgICAgICAgICAgICAgICB2YXIgbG9jYXRp
b24gPSBjYWxsRnJhbWUuc291cmNlQ29kZUxvY2F0aW9uOworICAgICAgICAgICAgICAgIHZhciBs
aW5lID0gbG9jYXRpb24ubGluZU51bWJlciArIDE7CisgICAgICAgICAgICAgICAgdmFyIGNvbHVt
biA9IGxvY2F0aW9uLmNvbHVtbk51bWJlciArIDE7CisKKyAgICAgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmxvZygiUEFVU0UgIyIgKyAoKytwYXVzZXMpICsgIiBBVDogIiArIGZ1bmNOYW1lICsg
IjoiICsgbGluZSArICI6IiArIGNvbHVtbik7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LmRlYnVnZ2VyTWFuYWdlci5yZXN1bWUoKTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBSZXN1bWluZy4KKyAgICAgICAgICAgICAgICBpZiAocmVzdW1lQWN0aW9u
ID09ICdGaW5pc2hPblJlc3VtZScpCisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
Y29tcGxldGVUZXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIC8v
IFRoaXMgaXMgYSBzaWduYWwgbWVjaGFuaXNtIGZvciB0aGUgd2ViIHByb2Nlc3MgdG8gdGVsbCB1
cyB0aGF0IHRoZSB0ZXN0IGlzIGRvbmUuCisgICAgICAgIC8vIFRoZSB3ZWIgcHJvY2VzcyBmaXJl
cyB0aGUgc2lnbmFsIGJ5IGRvaW5nIGNvbnNvbGUubG9nKCJET05FIikuCisgICAgICAgIFdlYklu
c3BlY3Rvci5sb2dNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkxvZ01hbmFn
ZXIuRXZlbnQuTWVzc2FnZUFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFy
IG1lc3NhZ2UgPSBldmVudC5kYXRhLm1lc3NhZ2U7CisgICAgICAgICAgICBpZiAoIW1lc3NhZ2Uu
cGFyYW1ldGVycyB8fCBtZXNzYWdlLnBhcmFtZXRlcnMubGVuZ3RoICE9PSAxKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlLnBhcmFtZXRlcnNbMF0udHlw
ZSAhPT0gInN0cmluZyIgfHwgbWVzc2FnZS5wYXJhbWV0ZXJzWzBdLmRlc2NyaXB0aW9uICE9PSAi
RE9ORSIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5y
ZWxvYWRQYWdlKCk7CisgICAgfQorCisgICAgZG9FeGNlcHRpb25UZXN0KCd0ZXN0RmluYWxseScs
ICdVbmNhdWdodEV4Y2VwdGlvbnMnLCAnSWdub3JlUmVzdW1lJyk7Cit9Cis8L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8cD5DaGVja2luZyBwYXVzZSBs
b2NhdGlvbnMgd2hlbiBwYXVzaW5nIG9uIHVuY2F1Z2h0IGV4Y2VwdGlvbnMuPC9wPgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9u
LXVuY2F1Z2h0LWV4Y2VwdGlvbi1uYXRpdmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi11bmNhdWdodC1leGNlcHRpb24t
bmF0aXZlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rv
ci9kZWJ1Z2dlci9icmVhay1vbi11bmNhdWdodC1leGNlcHRpb24tbmF0aXZlLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAz
MTogdGVzdFRocm93aW5nVGhydU5hdGl2ZUNvZGUKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA3OiB0
aHJvd2luZyBUZXN0RXJyb3IKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA4OiBUZXN0RXJyb3IKK0No
ZWNraW5nIHBhdXNlIGxvY2F0aW9ucyB3aGVuIHBhdXNpbmcgb24gdW5jYXVnaHQgZXhjZXB0aW9u
cy4KKworUEFVU0UgIzEgQVQ6IGRvVGhyb3c6ODoyMgorVW5jYXVnaHQgZXhjZXB0aW9uIGluIHRl
c3QgcGFnZTogVGVzdEVycm9yIFticmVhay1vbi1leGNlcHRpb24tdGVzdHMuanM6OF0KKwpJbmRl
eDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0LWV4Y2Vw
dGlvbi1uYXRpdmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVi
dWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLW5hdGl2ZS5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0LWV4
Y2VwdGlvbi1uYXRpdmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACis8IWRv
Y3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL3Jlc291cmNlcy9i
cmVhay1vbi1leGNlcHRpb24tdGVzdHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9u
IHRlc3QoKSB7CisgICAgZnVuY3Rpb24gZG9FeGNlcHRpb25UZXN0KHRlc3ROYW1lLCBleGNlcHRp
b25CcmVha1R5cGUsIHJlc3VtZUFjdGlvbikKKyAgICB7CisgICAgICAgIHZhciBwYXVzZXMgPSAw
OworICAgICAgICB2YXIgaW5kZXggPSAwOworCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RDYXNl
KHRlc3QpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoInNldFRp
bWVvdXQoIiArIHRlc3QgKyAiLCA1MCkiKTsKKyAgICAgICAgfQorCisgICAgICAgIFdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdn
ZXJNYW5hZ2VyLkV2ZW50LlNjcmlwdEFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAg
ICAgdmFyIHNjcmlwdE9iamVjdCA9IGV2ZW50LmRhdGEuc2NyaXB0OworICAgICAgICAgICAgaWYg
KCEvYnJlYWstb24tZXhjZXB0aW9uLXRlc3RzXC5qcyQvLnRlc3Qoc2NyaXB0T2JqZWN0LnVybCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoZXhjZXB0aW9uQnJl
YWtUeXBlID09ICdBbGxFeGNlcHRpb25zJykKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNYW5hZ2VyLmFsbEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TWFuYWdlci5hbGxVbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7
CisKKyAgICAgICAgICAgIHJ1blRlc3RDYXNlKHRlc3ROYW1lKTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQ2FsbEZyYW1lc0RpZENoYW5nZSwgZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICAgICAgICAgIHZhciBjYWxsRnJhbWUgPSBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNYW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZTsKKyAgICAgICAgICAgIGlmIChjYWxsRnJhbWUp
IHsKKyAgICAgICAgICAgICAgICAvLyBQYXVzaW5nLgorICAgICAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QuYXNzZXJ0KFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VSZWFzb24gPT0g
ImV4Y2VwdGlvbiIpOworCisgICAgICAgICAgICAgICAgdmFyIGZ1bmNOYW1lID0gY2FsbEZyYW1l
LmZ1bmN0aW9uTmFtZSB8fCAiPGFub255bW91cz4iOworICAgICAgICAgICAgICAgIHZhciBsb2Nh
dGlvbiA9IGNhbGxGcmFtZS5zb3VyY2VDb2RlTG9jYXRpb247CisgICAgICAgICAgICAgICAgdmFy
IGxpbmUgPSBsb2NhdGlvbi5saW5lTnVtYmVyICsgMTsKKyAgICAgICAgICAgICAgICB2YXIgY29s
dW1uID0gbG9jYXRpb24uY29sdW1uTnVtYmVyICsgMTsKKworICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QubG9nKCJQQVVTRSAjIiArICgrK3BhdXNlcykgKyAiIEFUOiAiICsgZnVuY05hbWUg
KyAiOiIgKyBsaW5lICsgIjoiICsgY29sdW1uKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0
b3IuZGVidWdnZXJNYW5hZ2VyLnJlc3VtZSgpOworCisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIFJlc3VtaW5nLgorICAgICAgICAgICAgICAgIGlmIChyZXN1bWVBY3Rp
b24gPT0gJ0ZpbmlzaE9uUmVzdW1lJykKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAg
Ly8gVGhpcyBpcyBhIHNpZ25hbCBtZWNoYW5pc20gZm9yIHRoZSB3ZWIgcHJvY2VzcyB0byB0ZWxs
IHVzIHRoYXQgdGhlIHRlc3QgaXMgZG9uZS4KKyAgICAgICAgLy8gVGhlIHdlYiBwcm9jZXNzIGZp
cmVzIHRoZSBzaWduYWwgYnkgZG9pbmcgY29uc29sZS5sb2coIkRPTkUiKS4KKyAgICAgICAgV2Vi
SW5zcGVjdG9yLmxvZ01hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTG9nTWFu
YWdlci5FdmVudC5NZXNzYWdlQWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2
YXIgbWVzc2FnZSA9IGV2ZW50LmRhdGEubWVzc2FnZTsKKyAgICAgICAgICAgIGlmICghbWVzc2Fn
ZS5wYXJhbWV0ZXJzIHx8IG1lc3NhZ2UucGFyYW1ldGVycy5sZW5ndGggIT09IDEpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFyYW1ldGVyc1swXS50
eXBlICE9PSAic3RyaW5nIiB8fCBtZXNzYWdlLnBhcmFtZXRlcnNbMF0uZGVzY3JpcHRpb24gIT09
ICJET05FIikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LmNvbXBsZXRlVGVzdCgpOworICAgICAgICB9KTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0
LnJlbG9hZFBhZ2UoKTsKKyAgICB9CisKKyAgICBkb0V4Y2VwdGlvblRlc3QoJ3Rlc3RUaHJvd2lu
Z1RocnVOYXRpdmVDb2RlJywgJ1VuY2F1Z2h0RXhjZXB0aW9ucycsICdJZ25vcmVSZXN1bWUnKTsK
K30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDxw
PkNoZWNraW5nIHBhdXNlIGxvY2F0aW9ucyB3aGVuIHBhdXNpbmcgb24gdW5jYXVnaHQgZXhjZXB0
aW9ucy48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
ZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLXRocm93LWluLXByb21pc2UtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9i
cmVhay1vbi11bmNhdWdodC1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24t
dW5jYXVnaHQtZXhjZXB0aW9uLXRocm93LWluLXByb21pc2UtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDM2OiB0ZXN0VGhy
b3dpbmdJblByb21pc2UKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAzODogaW4gcHJvbWlzZQorQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDc6IHRocm93aW5nIFRlc3RFcnJvcgorQ2hlY2tpbmcgcGF1c2Ug
bG9jYXRpb25zIHdoZW4gcGF1c2luZyBvbiB1bmNhdWdodCBleGNlcHRpb25zLgorCitQQVVTRSAj
MSBBVDogZG9UaHJvdzo4OjIyCisKSW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9icmVhay1vbi11bmNhdWdodC1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS1yZXRocm93LWlu
LWNhdGNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
ZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLXRocm93LWluLXByb21pc2UtcmV0
aHJvdy1pbi1jYXRjaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLXRocm93LWluLXBy
b21pc2UtcmV0aHJvdy1pbi1jYXRjaC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5IEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgODA6IHRlc3RUaHJvd2luZ0luUHJvbWlz
ZVdpdGhSZXRocm93SW5DYXRjaAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDgyOiBpbiBwcm9taXNl
CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNzogdGhyb3dpbmcgVGVzdEVycm9yCitDT05TT0xFIE1F
U1NBR0U6IGxpbmUgODU6IGluIHByb21pc2UuY2F0Y2gKK0NoZWNraW5nIHBhdXNlIGxvY2F0aW9u
cyB3aGVuIHBhdXNpbmcgb24gdW5jYXVnaHQgZXhjZXB0aW9ucy4KKworUEFVU0UgIzEgQVQ6IGRv
VGhyb3c6ODoyMgorUEFVU0UgIzIgQVQ6IHByb21pc2VDYXRjaDo4NjoxNgorCkluZGV4OiBMYXlv
dXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLXRo
cm93LWluLXByb21pc2UtcmV0aHJvdy1pbi1jYXRjaC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi11bmNhdWdodC1leGNlcHRpb24tdGhy
b3ctaW4tcHJvbWlzZS1yZXRocm93LWluLWNhdGNoLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLXRo
cm93LWluLXByb21pc2UtcmV0aHJvdy1pbi1jYXRjaC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzIgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3Bl
Y3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9Ii4vcmVzb3VyY2VzL2JyZWFrLW9uLWV4Y2VwdGlvbi10ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBmdW5jdGlvbiBkb0V4Y2VwdGlvblRlc3Qo
dGVzdE5hbWUsIGV4Y2VwdGlvbkJyZWFrVHlwZSwgcmVzdW1lQWN0aW9uKQorICAgIHsKKyAgICAg
ICAgdmFyIHBhdXNlcyA9IDA7CisgICAgICAgIHZhciBpbmRleCA9IDA7CisKKyAgICAgICAgZnVu
Y3Rpb24gcnVuVGVzdENhc2UodGVzdCkgeworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmFs
dWF0ZUluUGFnZSgic2V0VGltZW91dCgiICsgdGVzdCArICIsIDUwKSIpOworICAgICAgICB9CisK
KyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuU2NyaXB0QWRkZWQsIGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgICAgICAgICB2YXIgc2NyaXB0T2JqZWN0ID0gZXZlbnQuZGF0YS5zY3JpcHQ7
CisgICAgICAgICAgICBpZiAoIS9icmVhay1vbi1leGNlcHRpb24tdGVzdHNcLmpzJC8udGVzdChz
Y3JpcHRPYmplY3QudXJsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
IGlmIChleGNlcHRpb25CcmVha1R5cGUgPT0gJ0FsbEV4Y2VwdGlvbnMnKQorICAgICAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQu
ZGlzYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBXZWJJ
bnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFsbFVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQu
ZGlzYWJsZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgcnVuVGVzdENhc2UodGVzdE5hbWUpOwor
ICAgICAgICB9KTsKKworICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5DYWxsRnJhbWVz
RGlkQ2hhbmdlLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFyIGNhbGxGcmFtZSA9
IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWN0aXZlQ2FsbEZyYW1lOworICAgICAgICAg
ICAgaWYgKGNhbGxGcmFtZSkgeworICAgICAgICAgICAgICAgIC8vIFBhdXNpbmcuCisgICAgICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQoV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdl
ci5wYXVzZVJlYXNvbiA9PSAiZXhjZXB0aW9uIik7CisKKyAgICAgICAgICAgICAgICB2YXIgZnVu
Y05hbWUgPSBjYWxsRnJhbWUuZnVuY3Rpb25OYW1lIHx8ICI8YW5vbnltb3VzPiI7CisgICAgICAg
ICAgICAgICAgdmFyIGxvY2F0aW9uID0gY2FsbEZyYW1lLnNvdXJjZUNvZGVMb2NhdGlvbjsKKyAg
ICAgICAgICAgICAgICB2YXIgbGluZSA9IGxvY2F0aW9uLmxpbmVOdW1iZXIgKyAxOworICAgICAg
ICAgICAgICAgIHZhciBjb2x1bW4gPSBsb2NhdGlvbi5jb2x1bW5OdW1iZXIgKyAxOworCisgICAg
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlBBVVNFICMiICsgKCsrcGF1c2VzKSArICIg
QVQ6ICIgKyBmdW5jTmFtZSArICI6IiArIGxpbmUgKyAiOiIgKyBjb2x1bW4pOworICAgICAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucmVzdW1lKCk7CisKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gUmVzdW1pbmcuCisgICAgICAgICAgICAg
ICAgaWYgKHJlc3VtZUFjdGlvbiA9PSAnRmluaXNoT25SZXN1bWUnKQorICAgICAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9KTsKKworICAgICAgICAvLyBUaGlzIGlzIGEgc2lnbmFsIG1lY2hhbmlzbSBmb3IgdGhlIHdl
YiBwcm9jZXNzIHRvIHRlbGwgdXMgdGhhdCB0aGUgdGVzdCBpcyBkb25lLgorICAgICAgICAvLyBU
aGUgd2ViIHByb2Nlc3MgZmlyZXMgdGhlIHNpZ25hbCBieSBkb2luZyBjb25zb2xlLmxvZygiRE9O
RSIpLgorICAgICAgICBXZWJJbnNwZWN0b3IubG9nTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5Mb2dNYW5hZ2VyLkV2ZW50Lk1lc3NhZ2VBZGRlZCwgZnVuY3Rpb24oZXZlbnQp
IHsKKyAgICAgICAgICAgIHZhciBtZXNzYWdlID0gZXZlbnQuZGF0YS5tZXNzYWdlOworICAgICAg
ICAgICAgaWYgKCFtZXNzYWdlLnBhcmFtZXRlcnMgfHwgbWVzc2FnZS5wYXJhbWV0ZXJzLmxlbmd0
aCAhPT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAobWVzc2Fn
ZS5wYXJhbWV0ZXJzWzBdLnR5cGUgIT09ICJzdHJpbmciIHx8IG1lc3NhZ2UucGFyYW1ldGVyc1sw
XS5kZXNjcmlwdGlvbiAhPT0gIkRPTkUiKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7CisgICAgICAgIH0pOworCisgICAg
ICAgIEluc3BlY3RvclRlc3QucmVsb2FkUGFnZSgpOworICAgIH0KKworICAgIGRvRXhjZXB0aW9u
VGVzdCgndGVzdFRocm93aW5nSW5Qcm9taXNlV2l0aFJldGhyb3dJbkNhdGNoJywgJ1VuY2F1Z2h0
RXhjZXB0aW9ucycsICdGaW5pc2hPblJlc3VtZScpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgPHA+Q2hlY2tpbmcgcGF1c2UgbG9jYXRpb25z
IHdoZW4gcGF1c2luZyBvbiB1bmNhdWdodCBleGNlcHRpb25zLjwvcD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi11bmNhdWdo
dC1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS10aGVuLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhj
ZXB0aW9uLXRocm93LWluLXByb21pc2UtdGhlbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0
aW9uLXRocm93LWluLXByb21pc2UtdGhlbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4IEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNTU6IHRlc3RUaHJvd2luZ0luUHJv
bWlzZVRoZW4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSA1NzogaW4gcHJvbWlzZQorQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDYwOiBpbiBwcm9taXNlLnRoZW4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSA3
OiB0aHJvd2luZyBUZXN0RXJyb3IKK0NoZWNraW5nIHBhdXNlIGxvY2F0aW9ucyB3aGVuIHBhdXNp
bmcgb24gdW5jYXVnaHQgZXhjZXB0aW9ucy4KKworUEFVU0UgIzEgQVQ6IGRvVGhyb3c6ODoyMgor
CkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQt
ZXhjZXB0aW9uLXRocm93LWluLXByb21pc2UtdGhlbi13aXRoLWNhdGNoLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5j
YXVnaHQtZXhjZXB0aW9uLXRocm93LWluLXByb21pc2UtdGhlbi13aXRoLWNhdGNoLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVh
ay1vbi11bmNhdWdodC1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS10aGVuLXdpdGgtY2F0Y2gt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0NPTlNPTEUgTUVT
U0FHRTogbGluZSA2NjogdGVzdFRocm93aW5nSW5Qcm9taXNlVGhlbldpdGhDYXRjaAorQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDY4OiBpbiBwcm9taXNlCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNzE6
IGluIHByb21pc2UudGhlbgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDc6IHRocm93aW5nIFRlc3RF
cnJvcgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDc0OiBpbiBwcm9taXNlLmNhdGNoCitDT05TT0xF
IE1FU1NBR0U6IGxpbmUgNzU6IERPTkUKK0NoZWNraW5nIHBhdXNlIGxvY2F0aW9ucyB3aGVuIHBh
dXNpbmcgb24gdW5jYXVnaHQgZXhjZXB0aW9ucy4KKworUEFVU0UgIzEgQVQ6IGRvVGhyb3c6ODoy
MgorCkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVn
aHQtZXhjZXB0aW9uLXRocm93LWluLXByb21pc2UtdGhlbi13aXRoLWNhdGNoLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0
LWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXRoZW4td2l0aC1jYXRjaC5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0
LWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXRoZW4td2l0aC1jYXRjaC5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9Ii4vcmVzb3VyY2VzL2JyZWFrLW9uLWV4Y2VwdGlvbi10ZXN0cy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBmdW5jdGlvbiBkb0V4
Y2VwdGlvblRlc3QodGVzdE5hbWUsIGV4Y2VwdGlvbkJyZWFrVHlwZSwgcmVzdW1lQWN0aW9uKQor
ICAgIHsKKyAgICAgICAgdmFyIHBhdXNlcyA9IDA7CisgICAgICAgIHZhciBpbmRleCA9IDA7CisK
KyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdENhc2UodGVzdCkgeworICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5ldmFsdWF0ZUluUGFnZSgic2V0VGltZW91dCgiICsgdGVzdCArICIsIDUwKSIpOwor
ICAgICAgICB9CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuU2NyaXB0QWRkZWQs
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2YXIgc2NyaXB0T2JqZWN0ID0gZXZlbnQu
ZGF0YS5zY3JpcHQ7CisgICAgICAgICAgICBpZiAoIS9icmVhay1vbi1leGNlcHRpb24tdGVzdHNc
LmpzJC8udGVzdChzY3JpcHRPYmplY3QudXJsKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIGlmIChleGNlcHRpb25CcmVha1R5cGUgPT0gJ0FsbEV4Y2VwdGlvbnMnKQor
ICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWxsRXhjZXB0aW9u
c0JyZWFrcG9pbnQuZGlzYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFsbFVuY2F1Z2h0RXhjZXB0aW9u
c0JyZWFrcG9pbnQuZGlzYWJsZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgcnVuVGVzdENhc2Uo
dGVzdE5hbWUpOworICAgICAgICB9KTsKKworICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVu
dC5DYWxsRnJhbWVzRGlkQ2hhbmdlLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFy
IGNhbGxGcmFtZSA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWN0aXZlQ2FsbEZyYW1l
OworICAgICAgICAgICAgaWYgKGNhbGxGcmFtZSkgeworICAgICAgICAgICAgICAgIC8vIFBhdXNp
bmcuCisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQoV2ViSW5zcGVjdG9yLmRl
YnVnZ2VyTWFuYWdlci5wYXVzZVJlYXNvbiA9PSAiZXhjZXB0aW9uIik7CisKKyAgICAgICAgICAg
ICAgICB2YXIgZnVuY05hbWUgPSBjYWxsRnJhbWUuZnVuY3Rpb25OYW1lIHx8ICI8YW5vbnltb3Vz
PiI7CisgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gY2FsbEZyYW1lLnNvdXJjZUNvZGVM
b2NhdGlvbjsKKyAgICAgICAgICAgICAgICB2YXIgbGluZSA9IGxvY2F0aW9uLmxpbmVOdW1iZXIg
KyAxOworICAgICAgICAgICAgICAgIHZhciBjb2x1bW4gPSBsb2NhdGlvbi5jb2x1bW5OdW1iZXIg
KyAxOworCisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlBBVVNFICMiICsgKCsr
cGF1c2VzKSArICIgQVQ6ICIgKyBmdW5jTmFtZSArICI6IiArIGxpbmUgKyAiOiIgKyBjb2x1bW4p
OworICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucmVzdW1lKCk7
CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gUmVzdW1pbmcuCisg
ICAgICAgICAgICAgICAgaWYgKHJlc3VtZUFjdGlvbiA9PSAnRmluaXNoT25SZXN1bWUnKQorICAg
ICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKworICAgICAgICAvLyBUaGlzIGlzIGEgc2lnbmFsIG1lY2hhbmlz
bSBmb3IgdGhlIHdlYiBwcm9jZXNzIHRvIHRlbGwgdXMgdGhhdCB0aGUgdGVzdCBpcyBkb25lLgor
ICAgICAgICAvLyBUaGUgd2ViIHByb2Nlc3MgZmlyZXMgdGhlIHNpZ25hbCBieSBkb2luZyBjb25z
b2xlLmxvZygiRE9ORSIpLgorICAgICAgICBXZWJJbnNwZWN0b3IubG9nTWFuYWdlci5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLkV2ZW50Lk1lc3NhZ2VBZGRlZCwgZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIHZhciBtZXNzYWdlID0gZXZlbnQuZGF0YS5tZXNz
YWdlOworICAgICAgICAgICAgaWYgKCFtZXNzYWdlLnBhcmFtZXRlcnMgfHwgbWVzc2FnZS5wYXJh
bWV0ZXJzLmxlbmd0aCAhPT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBpZiAobWVzc2FnZS5wYXJhbWV0ZXJzWzBdLnR5cGUgIT09ICJzdHJpbmciIHx8IG1lc3NhZ2Uu
cGFyYW1ldGVyc1swXS5kZXNjcmlwdGlvbiAhPT0gIkRPTkUiKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7CisgICAgICAg
IH0pOworCisgICAgICAgIEluc3BlY3RvclRlc3QucmVsb2FkUGFnZSgpOworICAgIH0KKworICAg
IGRvRXhjZXB0aW9uVGVzdCgndGVzdFRocm93aW5nSW5Qcm9taXNlVGhlbldpdGhDYXRjaCcsICdV
bmNhdWdodEV4Y2VwdGlvbnMnLCAnSWdub3JlUmVzdW1lJyk7Cit9Cis8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8cD5DaGVja2luZyBwYXVzZSBsb2Nh
dGlvbnMgd2hlbiBwYXVzaW5nIG9uIHVuY2F1Z2h0IGV4Y2VwdGlvbnMuPC9wPgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLXVu
Y2F1Z2h0LWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXRoZW4uaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0
aW9uLXRocm93LWluLXByb21pc2UtdGhlbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0LWV4Y2VwdGlvbi10aHJvdy1p
bi1wcm9taXNlLXRoZW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACis8IWRv
Y3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL3Jlc291cmNlcy9i
cmVhay1vbi1leGNlcHRpb24tdGVzdHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9u
IHRlc3QoKSB7CisgICAgZnVuY3Rpb24gZG9FeGNlcHRpb25UZXN0KHRlc3ROYW1lLCBleGNlcHRp
b25CcmVha1R5cGUsIHJlc3VtZUFjdGlvbikKKyAgICB7CisgICAgICAgIHZhciBwYXVzZXMgPSAw
OworICAgICAgICB2YXIgaW5kZXggPSAwOworCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RDYXNl
KHRlc3QpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoInNldFRp
bWVvdXQoIiArIHRlc3QgKyAiLCA1MCkiKTsKKyAgICAgICAgfQorCisgICAgICAgIFdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdn
ZXJNYW5hZ2VyLkV2ZW50LlNjcmlwdEFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAg
ICAgdmFyIHNjcmlwdE9iamVjdCA9IGV2ZW50LmRhdGEuc2NyaXB0OworICAgICAgICAgICAgaWYg
KCEvYnJlYWstb24tZXhjZXB0aW9uLXRlc3RzXC5qcyQvLnRlc3Qoc2NyaXB0T2JqZWN0LnVybCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoZXhjZXB0aW9uQnJl
YWtUeXBlID09ICdBbGxFeGNlcHRpb25zJykKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNYW5hZ2VyLmFsbEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TWFuYWdlci5hbGxVbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7
CisKKyAgICAgICAgICAgIHJ1blRlc3RDYXNlKHRlc3ROYW1lKTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQ2FsbEZyYW1lc0RpZENoYW5nZSwgZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICAgICAgICAgIHZhciBjYWxsRnJhbWUgPSBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNYW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZTsKKyAgICAgICAgICAgIGlmIChjYWxsRnJhbWUp
IHsKKyAgICAgICAgICAgICAgICAvLyBQYXVzaW5nLgorICAgICAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QuYXNzZXJ0KFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VSZWFzb24gPT0g
ImV4Y2VwdGlvbiIpOworCisgICAgICAgICAgICAgICAgdmFyIGZ1bmNOYW1lID0gY2FsbEZyYW1l
LmZ1bmN0aW9uTmFtZSB8fCAiPGFub255bW91cz4iOworICAgICAgICAgICAgICAgIHZhciBsb2Nh
dGlvbiA9IGNhbGxGcmFtZS5zb3VyY2VDb2RlTG9jYXRpb247CisgICAgICAgICAgICAgICAgdmFy
IGxpbmUgPSBsb2NhdGlvbi5saW5lTnVtYmVyICsgMTsKKyAgICAgICAgICAgICAgICB2YXIgY29s
dW1uID0gbG9jYXRpb24uY29sdW1uTnVtYmVyICsgMTsKKworICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QubG9nKCJQQVVTRSAjIiArICgrK3BhdXNlcykgKyAiIEFUOiAiICsgZnVuY05hbWUg
KyAiOiIgKyBsaW5lICsgIjoiICsgY29sdW1uKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0
b3IuZGVidWdnZXJNYW5hZ2VyLnJlc3VtZSgpOworCisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIFJlc3VtaW5nLgorICAgICAgICAgICAgICAgIGlmIChyZXN1bWVBY3Rp
b24gPT0gJ0ZpbmlzaE9uUmVzdW1lJykKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAg
Ly8gVGhpcyBpcyBhIHNpZ25hbCBtZWNoYW5pc20gZm9yIHRoZSB3ZWIgcHJvY2VzcyB0byB0ZWxs
IHVzIHRoYXQgdGhlIHRlc3QgaXMgZG9uZS4KKyAgICAgICAgLy8gVGhlIHdlYiBwcm9jZXNzIGZp
cmVzIHRoZSBzaWduYWwgYnkgZG9pbmcgY29uc29sZS5sb2coIkRPTkUiKS4KKyAgICAgICAgV2Vi
SW5zcGVjdG9yLmxvZ01hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTG9nTWFu
YWdlci5FdmVudC5NZXNzYWdlQWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2
YXIgbWVzc2FnZSA9IGV2ZW50LmRhdGEubWVzc2FnZTsKKyAgICAgICAgICAgIGlmICghbWVzc2Fn
ZS5wYXJhbWV0ZXJzIHx8IG1lc3NhZ2UucGFyYW1ldGVycy5sZW5ndGggIT09IDEpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFyYW1ldGVyc1swXS50
eXBlICE9PSAic3RyaW5nIiB8fCBtZXNzYWdlLnBhcmFtZXRlcnNbMF0uZGVzY3JpcHRpb24gIT09
ICJET05FIikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LmNvbXBsZXRlVGVzdCgpOworICAgICAgICB9KTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0
LnJlbG9hZFBhZ2UoKTsKKyAgICB9CisKKyAgICBkb0V4Y2VwdGlvblRlc3QoJ3Rlc3RUaHJvd2lu
Z0luUHJvbWlzZVRoZW4nLCAnVW5jYXVnaHRFeGNlcHRpb25zJywgJ0ZpbmlzaE9uUmVzdW1lJyk7
Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8
cD5DaGVja2luZyBwYXVzZSBsb2NhdGlvbnMgd2hlbiBwYXVzaW5nIG9uIHVuY2F1Z2h0IGV4Y2Vw
dGlvbnMuPC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0LWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXdp
dGgtY2F0Y2gtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rv
ci9kZWJ1Z2dlci9icmVhay1vbi11bmNhdWdodC1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS13
aXRoLWNhdGNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2luc3Bl
Y3Rvci9kZWJ1Z2dlci9icmVhay1vbi11bmNhdWdodC1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlz
ZS13aXRoLWNhdGNoLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAK
K0NPTlNPTEUgTUVTU0FHRTogbGluZSA0NDogdGVzdFRocm93aW5nSW5Qcm9taXNlV2l0aENhdGNo
CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNDY6IGluIHByb21pc2UKK0NPTlNPTEUgTUVTU0FHRTog
bGluZSA3OiB0aHJvd2luZyBUZXN0RXJyb3IKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA0OTogaW4g
cHJvbWlzZS5jYXRjaAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDUwOiBET05FCitDaGVja2luZyBw
YXVzZSBsb2NhdGlvbnMgd2hlbiBwYXVzaW5nIG9uIHVuY2F1Z2h0IGV4Y2VwdGlvbnMuCisKK1BB
VVNFICMxIEFUOiBkb1Rocm93Ojg6MjIKKwpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Rl
YnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0LWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXdpdGgt
Y2F0Y2guaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIv
YnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLXRocm93LWluLXByb21pc2Utd2l0aC1jYXRjaC5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFr
LW9uLXVuY2F1Z2h0LWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLXdpdGgtY2F0Y2guaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9odHRwL3Rl
c3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL3Jlc291cmNlcy9icmVhay1vbi1leGNlcHRpb24tdGVz
dHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgZnVuY3Rp
b24gZG9FeGNlcHRpb25UZXN0KHRlc3ROYW1lLCBleGNlcHRpb25CcmVha1R5cGUsIHJlc3VtZUFj
dGlvbikKKyAgICB7CisgICAgICAgIHZhciBwYXVzZXMgPSAwOworICAgICAgICB2YXIgaW5kZXgg
PSAwOworCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RDYXNlKHRlc3QpIHsKKyAgICAgICAgICAg
IEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoInNldFRpbWVvdXQoIiArIHRlc3QgKyAiLCA1
MCkiKTsKKyAgICAgICAgfQorCisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlNjcmlw
dEFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFyIHNjcmlwdE9iamVjdCA9
IGV2ZW50LmRhdGEuc2NyaXB0OworICAgICAgICAgICAgaWYgKCEvYnJlYWstb24tZXhjZXB0aW9u
LXRlc3RzXC5qcyQvLnRlc3Qoc2NyaXB0T2JqZWN0LnVybCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBpZiAoZXhjZXB0aW9uQnJlYWtUeXBlID09ICdBbGxFeGNlcHRp
b25zJykKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFsbEV4
Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hbGxVbmNhdWdodEV4
Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7CisKKyAgICAgICAgICAgIHJ1blRl
c3RDYXNlKHRlc3ROYW1lKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRl
YnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFn
ZXIuRXZlbnQuQ2FsbEZyYW1lc0RpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAg
ICAgIHZhciBjYWxsRnJhbWUgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFjdGl2ZUNh
bGxGcmFtZTsKKyAgICAgICAgICAgIGlmIChjYWxsRnJhbWUpIHsKKyAgICAgICAgICAgICAgICAv
LyBQYXVzaW5nLgorICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KFdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VSZWFzb24gPT0gImV4Y2VwdGlvbiIpOworCisgICAg
ICAgICAgICAgICAgdmFyIGZ1bmNOYW1lID0gY2FsbEZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAiPGFu
b255bW91cz4iOworICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGNhbGxGcmFtZS5zb3Vy
Y2VDb2RlTG9jYXRpb247CisgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBsb2NhdGlvbi5saW5l
TnVtYmVyICsgMTsKKyAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gbG9jYXRpb24uY29sdW1u
TnVtYmVyICsgMTsKKworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQQVVTRSAj
IiArICgrK3BhdXNlcykgKyAiIEFUOiAiICsgZnVuY05hbWUgKyAiOiIgKyBsaW5lICsgIjoiICsg
Y29sdW1uKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnJl
c3VtZSgpOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFJlc3Vt
aW5nLgorICAgICAgICAgICAgICAgIGlmIChyZXN1bWVBY3Rpb24gPT0gJ0ZpbmlzaE9uUmVzdW1l
JykKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gVGhpcyBpcyBhIHNpZ25hbCBt
ZWNoYW5pc20gZm9yIHRoZSB3ZWIgcHJvY2VzcyB0byB0ZWxsIHVzIHRoYXQgdGhlIHRlc3QgaXMg
ZG9uZS4KKyAgICAgICAgLy8gVGhlIHdlYiBwcm9jZXNzIGZpcmVzIHRoZSBzaWduYWwgYnkgZG9p
bmcgY29uc29sZS5sb2coIkRPTkUiKS4KKyAgICAgICAgV2ViSW5zcGVjdG9yLmxvZ01hbmFnZXIu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5FdmVudC5NZXNzYWdlQWRk
ZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IGV2ZW50LmRh
dGEubWVzc2FnZTsKKyAgICAgICAgICAgIGlmICghbWVzc2FnZS5wYXJhbWV0ZXJzIHx8IG1lc3Nh
Z2UucGFyYW1ldGVycy5sZW5ndGggIT09IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgaWYgKG1lc3NhZ2UucGFyYW1ldGVyc1swXS50eXBlICE9PSAic3RyaW5nIiB8fCBt
ZXNzYWdlLnBhcmFtZXRlcnNbMF0uZGVzY3JpcHRpb24gIT09ICJET05FIikKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOwor
ICAgICAgICB9KTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0LnJlbG9hZFBhZ2UoKTsKKyAgICB9
CisKKyAgICBkb0V4Y2VwdGlvblRlc3QoJ3Rlc3RUaHJvd2luZ0luUHJvbWlzZVdpdGhDYXRjaCcs
ICdVbmNhdWdodEV4Y2VwdGlvbnMnLCAnSWdub3JlUmVzdW1lJyk7Cit9Cis8L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8cD5DaGVja2luZyBwYXVzZSBs
b2NhdGlvbnMgd2hlbiBwYXVzaW5nIG9uIHVuY2F1Z2h0IGV4Y2VwdGlvbnMuPC9wPgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9u
LXVuY2F1Z2h0LWV4Y2VwdGlvbi10aHJvdy1pbi1wcm9taXNlLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0LWV4Y2VwdGlv
bi10aHJvdy1pbi1wcm9taXNlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLXRocm93LWluLXByb21p
c2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACis8IWRvY3R5cGUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8u
Li9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL3Jlc291cmNlcy9icmVhay1vbi1leGNl
cHRpb24tdGVzdHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRlc3QoKSB7Cisg
ICAgZnVuY3Rpb24gZG9FeGNlcHRpb25UZXN0KHRlc3ROYW1lLCBleGNlcHRpb25CcmVha1R5cGUs
IHJlc3VtZUFjdGlvbikKKyAgICB7CisgICAgICAgIHZhciBwYXVzZXMgPSAwOworICAgICAgICB2
YXIgaW5kZXggPSAwOworCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RDYXNlKHRlc3QpIHsKKyAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoInNldFRpbWVvdXQoIiArIHRl
c3QgKyAiLCA1MCkiKTsKKyAgICAgICAgfQorCisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2
ZW50LlNjcmlwdEFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFyIHNjcmlw
dE9iamVjdCA9IGV2ZW50LmRhdGEuc2NyaXB0OworICAgICAgICAgICAgaWYgKCEvYnJlYWstb24t
ZXhjZXB0aW9uLXRlc3RzXC5qcyQvLnRlc3Qoc2NyaXB0T2JqZWN0LnVybCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoZXhjZXB0aW9uQnJlYWtUeXBlID09ICdB
bGxFeGNlcHRpb25zJykKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5h
Z2VyLmFsbEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hbGxV
bmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7CisKKyAgICAgICAg
ICAgIHJ1blRlc3RDYXNlKHRlc3ROYW1lKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgV2ViSW5z
cGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1hbmFnZXIuRXZlbnQuQ2FsbEZyYW1lc0RpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsK
KyAgICAgICAgICAgIHZhciBjYWxsRnJhbWUgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2Vy
LmFjdGl2ZUNhbGxGcmFtZTsKKyAgICAgICAgICAgIGlmIChjYWxsRnJhbWUpIHsKKyAgICAgICAg
ICAgICAgICAvLyBQYXVzaW5nLgorICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0
KFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VSZWFzb24gPT0gImV4Y2VwdGlvbiIp
OworCisgICAgICAgICAgICAgICAgdmFyIGZ1bmNOYW1lID0gY2FsbEZyYW1lLmZ1bmN0aW9uTmFt
ZSB8fCAiPGFub255bW91cz4iOworICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGNhbGxG
cmFtZS5zb3VyY2VDb2RlTG9jYXRpb247CisgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBsb2Nh
dGlvbi5saW5lTnVtYmVyICsgMTsKKyAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gbG9jYXRp
b24uY29sdW1uTnVtYmVyICsgMTsKKworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9n
KCJQQVVTRSAjIiArICgrK3BhdXNlcykgKyAiIEFUOiAiICsgZnVuY05hbWUgKyAiOiIgKyBsaW5l
ICsgIjoiICsgY29sdW1uKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
YW5hZ2VyLnJlc3VtZSgpOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IC8vIFJlc3VtaW5nLgorICAgICAgICAgICAgICAgIGlmIChyZXN1bWVBY3Rpb24gPT0gJ0Zpbmlz
aE9uUmVzdW1lJykKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRl
c3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gVGhpcyBpcyBh
IHNpZ25hbCBtZWNoYW5pc20gZm9yIHRoZSB3ZWIgcHJvY2VzcyB0byB0ZWxsIHVzIHRoYXQgdGhl
IHRlc3QgaXMgZG9uZS4KKyAgICAgICAgLy8gVGhlIHdlYiBwcm9jZXNzIGZpcmVzIHRoZSBzaWdu
YWwgYnkgZG9pbmcgY29uc29sZS5sb2coIkRPTkUiKS4KKyAgICAgICAgV2ViSW5zcGVjdG9yLmxv
Z01hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5FdmVudC5N
ZXNzYWdlQWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2YXIgbWVzc2FnZSA9
IGV2ZW50LmRhdGEubWVzc2FnZTsKKyAgICAgICAgICAgIGlmICghbWVzc2FnZS5wYXJhbWV0ZXJz
IHx8IG1lc3NhZ2UucGFyYW1ldGVycy5sZW5ndGggIT09IDEpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFyYW1ldGVyc1swXS50eXBlICE9PSAic3Ry
aW5nIiB8fCBtZXNzYWdlLnBhcmFtZXRlcnNbMF0uZGVzY3JpcHRpb24gIT09ICJET05FIikKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRl
VGVzdCgpOworICAgICAgICB9KTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0LnJlbG9hZFBhZ2Uo
KTsKKyAgICB9CisKKyAgICBkb0V4Y2VwdGlvblRlc3QoJ3Rlc3RUaHJvd2luZ0luUHJvbWlzZScs
ICdVbmNhdWdodEV4Y2VwdGlvbnMnLCAnRmluaXNoT25SZXN1bWUnKTsKK30KKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDxwPkNoZWNraW5nIHBhdXNl
IGxvY2F0aW9ucyB3aGVuIHBhdXNpbmcgb24gdW5jYXVnaHQgZXhjZXB0aW9ucy48L3A+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWst
b24tdW5jYXVnaHQtZXhjZXB0aW9uLXdpbmRvdy1vbmVycm9yLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQt
ZXhjZXB0aW9uLXdpbmRvdy1vbmVycm9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi11bmNhdWdodC1leGNlcHRpb24t
d2luZG93LW9uZXJyb3ItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBA
QAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDc6IHRocm93aW5nIFRlc3RFcnJvcgorQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDg6IHdpbmRvdy5vbmVycm9yOiBUZXN0RXJyb3IKK0NPTlNPTEUgTUVTU0FH
RTogbGluZSA5OiBET05FCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgODogVGVzdEVycm9yCitDaGVj
a2luZyBwYXVzZSBsb2NhdGlvbnMgd2hlbiBwYXVzaW5nIG9uIHVuY2F1Z2h0IGV4Y2VwdGlvbnMu
CisKK1BBVVNFICMxIEFUOiBkb1Rocm93Ojg6MjIKKwpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2RlYnVnZ2VyL2JyZWFrLW9uLXVuY2F1Z2h0LWV4Y2VwdGlvbi13aW5kb3ctb25lcnJvci5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1v
bi11bmNhdWdodC1leGNlcHRpb24td2luZG93LW9uZXJyb3IuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi11bmNhdWdodC1leGNlcHRp
b24td2luZG93LW9uZXJyb3IuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACis8
IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL3Jlc291cmNl
cy9icmVhay1vbi1leGNlcHRpb24tdGVzdHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3dpbmRv
dy5vbmVycm9yID0gZnVuY3Rpb24oZSkgeworICAgIGNvbnNvbGUubG9nKCJ3aW5kb3cub25lcnJv
cjogIiArIGUpOworICAgIGNvbnNvbGUubG9nKCJET05FIik7Cit9CisKK2Z1bmN0aW9uIHRlc3Qo
KSB7CisgICAgZnVuY3Rpb24gZG9FeGNlcHRpb25UZXN0KHRlc3ROYW1lLCBleGNlcHRpb25CcmVh
a1R5cGUsIHJlc3VtZUFjdGlvbikKKyAgICB7CisgICAgICAgIHZhciBwYXVzZXMgPSAwOworICAg
ICAgICB2YXIgaW5kZXggPSAwOworCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RDYXNlKHRlc3Qp
IHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoInNldFRpbWVvdXQo
IiArIHRlc3QgKyAiLCA1MCkiKTsKKyAgICAgICAgfQorCisgICAgICAgIFdlYkluc3BlY3Rvci5k
ZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5h
Z2VyLkV2ZW50LlNjcmlwdEFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFy
IHNjcmlwdE9iamVjdCA9IGV2ZW50LmRhdGEuc2NyaXB0OworICAgICAgICAgICAgaWYgKCEvYnJl
YWstb24tZXhjZXB0aW9uLXRlc3RzXC5qcyQvLnRlc3Qoc2NyaXB0T2JqZWN0LnVybCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoZXhjZXB0aW9uQnJlYWtUeXBl
ID09ICdBbGxFeGNlcHRpb25zJykKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdn
ZXJNYW5hZ2VyLmFsbEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdl
ci5hbGxVbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50LmRpc2FibGVkID0gZmFsc2U7CisKKyAg
ICAgICAgICAgIHJ1blRlc3RDYXNlKHRlc3ROYW1lKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQ2FsbEZyYW1lc0RpZENoYW5nZSwgZnVuY3Rpb24oZXZl
bnQpIHsKKyAgICAgICAgICAgIHZhciBjYWxsRnJhbWUgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
YW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZTsKKyAgICAgICAgICAgIGlmIChjYWxsRnJhbWUpIHsKKyAg
ICAgICAgICAgICAgICAvLyBQYXVzaW5nLgorICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
YXNzZXJ0KFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VSZWFzb24gPT0gImV4Y2Vw
dGlvbiIpOworCisgICAgICAgICAgICAgICAgdmFyIGZ1bmNOYW1lID0gY2FsbEZyYW1lLmZ1bmN0
aW9uTmFtZSB8fCAiPGFub255bW91cz4iOworICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9
IGNhbGxGcmFtZS5zb3VyY2VDb2RlTG9jYXRpb247CisgICAgICAgICAgICAgICAgdmFyIGxpbmUg
PSBsb2NhdGlvbi5saW5lTnVtYmVyICsgMTsKKyAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0g
bG9jYXRpb24uY29sdW1uTnVtYmVyICsgMTsKKworICAgICAgICAgICAgICAgIEluc3BlY3RvclRl
c3QubG9nKCJQQVVTRSAjIiArICgrK3BhdXNlcykgKyAiIEFUOiAiICsgZnVuY05hbWUgKyAiOiIg
KyBsaW5lICsgIjoiICsgY29sdW1uKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNYW5hZ2VyLnJlc3VtZSgpOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIFJlc3VtaW5nLgorICAgICAgICAgICAgICAgIGlmIChyZXN1bWVBY3Rpb24gPT0g
J0ZpbmlzaE9uUmVzdW1lJykKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21w
bGV0ZVRlc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gVGhp
cyBpcyBhIHNpZ25hbCBtZWNoYW5pc20gZm9yIHRoZSB3ZWIgcHJvY2VzcyB0byB0ZWxsIHVzIHRo
YXQgdGhlIHRlc3QgaXMgZG9uZS4KKyAgICAgICAgLy8gVGhlIHdlYiBwcm9jZXNzIGZpcmVzIHRo
ZSBzaWduYWwgYnkgZG9pbmcgY29uc29sZS5sb2coIkRPTkUiKS4KKyAgICAgICAgV2ViSW5zcGVj
dG9yLmxvZ01hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5F
dmVudC5NZXNzYWdlQWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICB2YXIgbWVz
c2FnZSA9IGV2ZW50LmRhdGEubWVzc2FnZTsKKyAgICAgICAgICAgIGlmICghbWVzc2FnZS5wYXJh
bWV0ZXJzIHx8IG1lc3NhZ2UucGFyYW1ldGVycy5sZW5ndGggIT09IDEpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFyYW1ldGVyc1swXS50eXBlICE9
PSAic3RyaW5nIiB8fCBtZXNzYWdlLnBhcmFtZXRlcnNbMF0uZGVzY3JpcHRpb24gIT09ICJET05F
IikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNv
bXBsZXRlVGVzdCgpOworICAgICAgICB9KTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0LnJlbG9h
ZFBhZ2UoKTsKKyAgICB9CisKKyAgICBkb0V4Y2VwdGlvblRlc3QoJ2RvVGhyb3cnLCAnVW5jYXVn
aHRFeGNlcHRpb25zJywgJ0lnbm9yZVJlc3VtZScpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgPHA+Q2hlY2tpbmcgcGF1c2UgbG9jYXRpb25z
IHdoZW4gcGF1c2luZyBvbiB1bmNhdWdodCBleGNlcHRpb25zLjwvcD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVhay1vbi11bmNhdWdo
dC1leGNlcHRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVi
dWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWstb24tdW5jYXVnaHQtZXhjZXB0aW9u
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorPCFkb2N0eXBlIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4v
aHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9yZXNvdXJjZXMvYnJlYWstb24tZXhjZXB0
aW9uLXRlc3RzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0KCkgeworICAg
IGZ1bmN0aW9uIGRvRXhjZXB0aW9uVGVzdCh0ZXN0TmFtZSwgZXhjZXB0aW9uQnJlYWtUeXBlLCBy
ZXN1bWVBY3Rpb24pCisgICAgeworICAgICAgICB2YXIgcGF1c2VzID0gMDsKKyAgICAgICAgdmFy
IGluZGV4ID0gMDsKKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0Q2FzZSh0ZXN0KSB7CisgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJzZXRUaW1lb3V0KCIgKyB0ZXN0
ICsgIiwgNTApIik7CisgICAgICAgIH0KKworICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVu
dC5TY3JpcHRBZGRlZCwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIHZhciBzY3JpcHRP
YmplY3QgPSBldmVudC5kYXRhLnNjcmlwdDsKKyAgICAgICAgICAgIGlmICghL2JyZWFrLW9uLWV4
Y2VwdGlvbi10ZXN0c1wuanMkLy50ZXN0KHNjcmlwdE9iamVjdC51cmwpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkJyZWFrVHlwZSA9PSAnQWxs
RXhjZXB0aW9ucycpCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdl
ci5hbGxFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNhYmxlZCA9IGZhbHNlOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWxsVW5j
YXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludC5kaXNhYmxlZCA9IGZhbHNlOworCisgICAgICAgICAg
ICBydW5UZXN0Q2FzZSh0ZXN0TmFtZSk7CisgICAgICAgIH0pOworCisgICAgICAgIFdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdn
ZXJNYW5hZ2VyLkV2ZW50LkNhbGxGcmFtZXNEaWRDaGFuZ2UsIGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgICAgICAgICB2YXIgY2FsbEZyYW1lID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5h
Y3RpdmVDYWxsRnJhbWU7CisgICAgICAgICAgICBpZiAoY2FsbEZyYW1lKSB7CisgICAgICAgICAg
ICAgICAgLy8gUGF1c2luZy4KKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChX
ZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnBhdXNlUmVhc29uID09ICJleGNlcHRpb24iKTsK
KworICAgICAgICAgICAgICAgIHZhciBmdW5jTmFtZSA9IGNhbGxGcmFtZS5mdW5jdGlvbk5hbWUg
fHwgIjxhbm9ueW1vdXM+IjsKKyAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24gPSBjYWxsRnJh
bWUuc291cmNlQ29kZUxvY2F0aW9uOworICAgICAgICAgICAgICAgIHZhciBsaW5lID0gbG9jYXRp
b24ubGluZU51bWJlciArIDE7CisgICAgICAgICAgICAgICAgdmFyIGNvbHVtbiA9IGxvY2F0aW9u
LmNvbHVtbk51bWJlciArIDE7CisKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygi
UEFVU0UgIyIgKyAoKytwYXVzZXMpICsgIiBBVDogIiArIGZ1bmNOYW1lICsgIjoiICsgbGluZSAr
ICI6IiArIGNvbHVtbik7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFu
YWdlci5yZXN1bWUoKTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBSZXN1bWluZy4KKyAgICAgICAgICAgICAgICBpZiAocmVzdW1lQWN0aW9uID09ICdGaW5pc2hP
blJlc3VtZScpCisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIC8vIFRoaXMgaXMgYSBz
aWduYWwgbWVjaGFuaXNtIGZvciB0aGUgd2ViIHByb2Nlc3MgdG8gdGVsbCB1cyB0aGF0IHRoZSB0
ZXN0IGlzIGRvbmUuCisgICAgICAgIC8vIFRoZSB3ZWIgcHJvY2VzcyBmaXJlcyB0aGUgc2lnbmFs
IGJ5IGRvaW5nIGNvbnNvbGUubG9nKCJET05FIikuCisgICAgICAgIFdlYkluc3BlY3Rvci5sb2dN
YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIuRXZlbnQuTWVz
c2FnZUFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBl
dmVudC5kYXRhLm1lc3NhZ2U7CisgICAgICAgICAgICBpZiAoIW1lc3NhZ2UucGFyYW1ldGVycyB8
fCBtZXNzYWdlLnBhcmFtZXRlcnMubGVuZ3RoICE9PSAxKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlLnBhcmFtZXRlcnNbMF0udHlwZSAhPT0gInN0cmlu
ZyIgfHwgbWVzc2FnZS5wYXJhbWV0ZXJzWzBdLmRlc2NyaXB0aW9uICE9PSAiRE9ORSIpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRl
c3QoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5yZWxvYWRQYWdlKCk7
CisgICAgfQorCisgICAgZG9FeGNlcHRpb25UZXN0KCdkb1Rocm93JywgJ1VuY2F1Z2h0RXhjZXB0
aW9ucycsICdJZ25vcmVSZXN1bWUnKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25s
b2FkPSJydW5UZXN0KCkiPgorICAgIDxwPkNoZWNraW5nIHBhdXNlIGxvY2F0aW9ucyB3aGVuIHBh
dXNpbmcgb24gdW5jYXVnaHQgZXhjZXB0aW9ucy48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvcmVzb3VyY2VzL2JyZWFrLW9uLWV4Y2Vw
dGlvbi10ZXN0cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdn
ZXIvcmVzb3VyY2VzL2JyZWFrLW9uLWV4Y2VwdGlvbi10ZXN0cy5qcwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9yZXNvdXJjZXMvYnJlYWstb24tZXhjZXB0
aW9uLXRlc3RzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODggQEAKK0luc3BlY3RvclRl
c3RQcm94eS5uZWVkVG9TYW5pdGl6ZVVuY2F1Z2h0RXhjZXB0aW9uVXJscyA9IHRydWU7CisKK3Zh
ciBhcnIgPSBbIDEsIDIsIDMgXTsKK3ZhciBtYXBEYXRhID0gW1sgImEiLCBhcnIgXV07CisKK2Z1
bmN0aW9uIGRvVGhyb3coKSB7CisgICAgY29uc29sZS5sb2coInRocm93aW5nIFRlc3RFcnJvciIp
OworICAgIHRocm93ICJUZXN0RXJyb3IiOworfQorCitmdW5jdGlvbiB0ZXN0Q2F0Y2goKSB7Cisg
ICAgY29uc29sZS5sb2coInRlc3RDYXRjaCIpOworICAgIHRyeSB7CisgICAgICAgIGRvVGhyb3co
KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGNvbnNvbGUubG9nKCJjYXRjaCAiICsgZSk7
CisgICAgfQorICAgIGNvbnNvbGUubG9nKCJET05FIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RGaW5h
bGx5KCkgeworICAgIGNvbnNvbGUubG9nKCJ0ZXN0RmluYWxseSIpOworICAgIHRyeSB7CisgICAg
ICAgIGRvVGhyb3coKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBjb25zb2xlLmxvZygiZmlu
YWxseSIpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdFRocm93aW5nVGhydU5hdGl2ZUNvZGUo
KSB7CisgICAgY29uc29sZS5sb2coInRlc3RUaHJvd2luZ1RocnVOYXRpdmVDb2RlIik7CisgICAg
KG5ldyBNYXAobWFwRGF0YSkpLmZvckVhY2goZG9UaHJvdyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RU
aHJvd2luZ0luUHJvbWlzZSgpIHsKKyAgICBjb25zb2xlLmxvZygidGVzdFRocm93aW5nSW5Qcm9t
aXNlIik7CisgICAgbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZShyZXNvbHZlLCByZWplY3Qp
IHsKKyAgICAgICAgY29uc29sZS5sb2coImluIHByb21pc2UiKTsKKyAgICAgICAgZG9UaHJvdygp
OworICAgIH0pOworfQorCitmdW5jdGlvbiB0ZXN0VGhyb3dpbmdJblByb21pc2VXaXRoQ2F0Y2go
KSB7CisgICAgY29uc29sZS5sb2coInRlc3RUaHJvd2luZ0luUHJvbWlzZVdpdGhDYXRjaCIpOwor
ICAgIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2UocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAg
ICAgIGNvbnNvbGUubG9nKCJpbiBwcm9taXNlIik7CisgICAgICAgIGRvVGhyb3coKTsKKyAgICB9
KS5jYXRjaChmdW5jdGlvbiBwcm9taXNlQ2F0Y2goZSkgeworICAgICAgICBjb25zb2xlLmxvZygi
aW4gcHJvbWlzZS5jYXRjaCIpOworICAgICAgICBjb25zb2xlLmxvZygiRE9ORSIpOworICAgIH0p
OworfQorCitmdW5jdGlvbiB0ZXN0VGhyb3dpbmdJblByb21pc2VUaGVuKCkgeworICAgIGNvbnNv
bGUubG9nKCJ0ZXN0VGhyb3dpbmdJblByb21pc2VUaGVuIik7CisgICAgbmV3IFByb21pc2UoZnVu
Y3Rpb24gcHJvbWlzZShyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgY29uc29sZS5sb2coImlu
IHByb21pc2UiKTsKKyAgICAgICAgcmVzb2x2ZSgpOworICAgIH0pLnRoZW4oZnVuY3Rpb24gcHJv
bWlzZVRoZW4oeCkgeworICAgICAgICBjb25zb2xlLmxvZygiaW4gcHJvbWlzZS50aGVuIik7Cisg
ICAgICAgIGRvVGhyb3coKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gdGVzdFRocm93aW5nSW5Q
cm9taXNlVGhlbldpdGhDYXRjaCgpIHsKKyAgICBjb25zb2xlLmxvZygidGVzdFRocm93aW5nSW5Q
cm9taXNlVGhlbldpdGhDYXRjaCIpOworICAgIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2Uo
cmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgIGNvbnNvbGUubG9nKCJpbiBwcm9taXNlIik7Cisg
ICAgICAgIHJlc29sdmUoKTsKKyAgICB9KS50aGVuKGZ1bmN0aW9uIHByb21pc2VUaGVuKHgpIHsK
KyAgICAgICAgY29uc29sZS5sb2coImluIHByb21pc2UudGhlbiIpOworICAgICAgICBkb1Rocm93
KCk7CisgICAgfSkuY2F0Y2goZnVuY3Rpb24gcHJvbWlzZUNhdGNoKGUpIHsKKyAgICAgICAgY29u
c29sZS5sb2coImluIHByb21pc2UuY2F0Y2giKTsKKyAgICAgICAgY29uc29sZS5sb2coIkRPTkUi
KTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gdGVzdFRocm93aW5nSW5Qcm9taXNlV2l0aFJldGhy
b3dJbkNhdGNoKCkgeworICAgIGNvbnNvbGUubG9nKCJ0ZXN0VGhyb3dpbmdJblByb21pc2VXaXRo
UmV0aHJvd0luQ2F0Y2giKTsKKyAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlKHJlc29s
dmUsIHJlamVjdCkgeworICAgICAgICBjb25zb2xlLmxvZygiaW4gcHJvbWlzZSIpOworICAgICAg
ICBkb1Rocm93KCk7CisgICAgfSkuY2F0Y2goZnVuY3Rpb24gcHJvbWlzZUNhdGNoKGUpIHsKKyAg
ICAgICAgY29uc29sZS5sb2coImluIHByb21pc2UuY2F0Y2giKTsKKyAgICAgICAgdGhyb3cgZTsK
KyAgICB9KTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>